62,046
社区成员
发帖
与我相关
我的任务
分享
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="table_dropdownlist.aspx.cs" Inherits="mytest_table_dropdownlist" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script type="text/javascript">
var step="";//step表示是第几级的联动
//异步回调
function callServer(input,str)//step表示是第几级的联动
{
debugger;
step = str;
// var arg = step + input.value; //区别是哪一个层次的回调
var arg=input.value;
//删除原来的控件,在选择下拉框项时,先将该下拉框之后的所有联动控件删除
DeleteTableCol();
if(input.value != "0")//选择了有意义的值,在这里,下拉框里有一行是请选择,对应的value为0
{
//添加联动控件
AddTableCol();
var context= document.getElementById("ddl"+step);
<%= ClientScript.GetCallbackEventReference(this, "arg", "receiveServerData", "context")%>;
}
}
//接受服务器回传的数据
function receiveServerData(_serverResult, context)
{
context.length=0;
//如果回调值为空,说明上一级的回调没有子集了,则删除在触发回调时添加的控件
if(_serverResult.length == 0)
{
DeleteTableCol();
}
else
{
var arrData = _serverResult.split(",");
for (var i = 0; i < arrData.length; i++)
{
var data = arrData[i].split("@");
context.options[context.length] = new Option(data[1],data[0]);
}
}
}
//添加列
function AddTableCol()
{
var tr=document.getElementById("mytr");
newtd=tr.insertCell();
newtd.id="td"+step;
var id = "ddl"+step;
var i = Number(step)+1;
newtd.innerHTML="<select id=\""+id+"\" name='mySelect' style='width:100px;' onchange='callServer(this,"+i+")'><option></option></select>";
newtd.style.width="100px";
}
//删除列
function DeleteTableCol()
{
var tdnum=document.getElementById("mytr").cells.length;
var tr=document.getElementById("mytr");
for (var i=tdnum-1; i>step; i--)
{
try{
tr.deleteCell(i);
}
catch(e)
{;}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table id="mytb">
<tr id="mytr">
<td><asp:DropDownList ID="ddl" runat="server" onchange="callServer(this,0)">
</asp:DropDownList></td>
</tr>
</table>
</div>
</form>
</body>
</html>
public partial class mytest_table_dropdownlist : System.Web.UI.Page, ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddl.DataSource = DataAccess.ExecuteSelectCommand("select id,name from mytb where parentId=0");
this.ddl.DataTextField = "MRSName";
this.ddl.DataValueField = "MeetingRoomSubregionID";
this.ddl.DataBind();
this.ddl.Items.Insert(0, new ListItem("--请选择--", "0"));
}
}
private string _serverResult = ""; // 用于保存回调内容
public void RaiseCallbackEvent(string eventArgument)
{
DataTable mydt = DataAccess.ExecuteSelectCommand("select id, name from mytb where parentId=" + eventArgument + "");
if (mydt != null)
{
if (mydt.Rows.Count != 0)
{
_serverResult = "0" + "@" + "--请选择--";
}
foreach (DataRow row in mydt.Rows)
{
if (_serverResult.Equals(string.Empty))
{
_serverResult = row["id"] + "@" + row["name"].ToString();
}
else
{
_serverResult = _serverResult + "," + row["id"] + "@" + row["name"].ToString();
}
}
}
}
//返回数据结果
public string GetCallbackResult()
{
return _serverResult;
}
}