相信和我一样,有很多同行都遇到主从dropdownlist互动的问题,比如选择了县,那么让系统自动在dropdownlist2中列出该县下属的乡名列表,而选了乡后,再在dropdownlist3中列出该乡下属的村的列表,那么我以前的解决方法是重新Rill相应dropdownlist所绑定的dataset,这样费事费资源,而且麻烦,其实我们可以用RowFilter来实现,下面是我的具体实现方法:
override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); InitA(); }
//初始化dorpdownlist
DataSet Myds; //CConection 为我的自定义类;实现与数据库的连接,其中有一属性为cnn,为OleDbConnection. CConection Mycnn;
public void InitA() { Mycnn=new CConection(); string strSql; strSql="select 编号,名称 from sys_county order by 编号"; OleDbDataAdapter MyoleAp=new OleDbDataAdapter(strSql,Mycnn.Cnn) ; Myds=new DataSet() ; MyoleAp.Fill(Myds,"sys_county"); this.DropDownList1.DataSource=Myds.Tables["sys_county"]; this.DropDownList1.DataValueField="编号"; this.DropDownList1.DataTextField="名称"; this.DropDownList1.DataBind(); strSql="select 编号,名称,所属县 from sys_town order by 编号"; MyoleAp.SelectCommand.CommandText=strSql; MyoleAp.Fill(Myds,"sys_town"); this.DropDownList2.DataSource=Myds.Tables["sys_town"]; this.DropDownList2.DataValueField="编号"; this.DropDownList2.DataTextField="名称"; MyoleAp.Dispose(); }
//DropDownList1的changed改变dorpdownlist2的显示值,
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e) { Myds.Tables["sys_town"].DefaultView.RowFilter="所属县='" + this.DropDownList1.SelectedValue +"'"; this.DropDownList2.DataBind(); } [注意:]以上代码在C#的webform下实现,dropdownlist1的autopostback必须为true.
|