在ASP.NET的页面中,若DropDownList直接放在页面中, 则将AutoPostBack设为true,即可响应SelectedIndexChange事件中,但放在DataList 控件中,则响应SelectedIndexChange事件发生变化时,如何定位DataList中的哪一项是比较重要的。下面是贴出来的代码,非常简单,就不用加注释了。(
源代码下载)
using
System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
public partial class _Default : System.Web.UI.Page
... {
protected void Page_Load(object sender, EventArgs e)
...{
if (!Page.IsPostBack)
...{
BindData();
BindToProvince();
}
}
private void BindData()
...{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("id", Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("xm", Type.GetType("System.String")));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "张三";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "李四";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "王五";
dt.Rows.Add(dr);
DataList1.DataSource = dt;
DataList1.DataBind();
}
private void BindToProvince()
...{
SortedList ht = new SortedList();
ht.Add(0, "未选");
ht.Add(1, "北京");
ht.Add(2, "上海");
foreach (DataListItem dl in DataList1.Items)
...{
DropDownList ddl = dl.FindControl("ddlProvince") as DropDownList;
ddl.DataSource = ht;
ddl.DataTextField = "Value";
ddl.DataValueField = "Key";
ddl.DataBind();
}
}
protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
...{
DropDownList ddlProvince = (DropDownList)sender;
DataListItem dl = (DataListItem)ddlProvince.Parent;
DropDownList ddlCity = dl.FindControl("ddlCity") as DropDownList;
ddlCity.Items.Clear();
int index = Convert.ToInt32(ddlProvince.SelectedValue);
if (index == 0)
...{
ddlCity.Items.Add(new ListItem("未选"));
}
if (index == 1)
...{
ddlCity.Items.Add(new ListItem("朝阳区"));
ddlCity.Items.Add(new ListItem("海淀区"));
ddlCity.Items.Add(new ListItem("昌平区"));
}
if (index == 2)
...{
ddlCity.Items.Add(new ListItem("上海"));
}
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
public partial class _Default : System.Web.UI.Page
... {
protected void Page_Load(object sender, EventArgs e)
...{
if (!Page.IsPostBack)
...{
BindData();
BindToProvince();
}
}
private void BindData()
...{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("id", Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("xm", Type.GetType("System.String")));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "张三";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "李四";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "王五";
dt.Rows.Add(dr);
DataList1.DataSource = dt;
DataList1.DataBind();
}
private void BindToProvince()
...{
SortedList ht = new SortedList();
ht.Add(0, "未选");
ht.Add(1, "北京");
ht.Add(2, "上海");
foreach (DataListItem dl in DataList1.Items)
...{
DropDownList ddl = dl.FindControl("ddlProvince") as DropDownList;
ddl.DataSource = ht;
ddl.DataTextField = "Value";
ddl.DataValueField = "Key";
ddl.DataBind();
}
}
protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
...{
DropDownList ddlProvince = (DropDownList)sender;
DataListItem dl = (DataListItem)ddlProvince.Parent;
DropDownList ddlCity = dl.FindControl("ddlCity") as DropDownList;
ddlCity.Items.Clear();
int index = Convert.ToInt32(ddlProvince.SelectedValue);
if (index == 0)
...{
ddlCity.Items.Add(new ListItem("未选"));
}
if (index == 1)
...{
ddlCity.Items.Add(new ListItem("朝阳区"));
ddlCity.Items.Add(new ListItem("海淀区"));
ddlCity.Items.Add(new ListItem("昌平区"));
}
if (index == 2)
...{
ddlCity.Items.Add(new ListItem("上海"));
}
}
}