添加事件处理程序遇到问题到动态创建的下拉列表
问题描述:
我在CS文件的Page_Load方法下面的代码:添加事件处理程序遇到问题到动态创建的下拉列表
DataSet data = new DataSet();
DataTable parent = new DataTable();
DataTable child = new DataTable();
//parse the xml here
parent.TableName = "Parent";
parent.Columns.Add("ID", typeof(int));
parent.Columns.Add("Name", typeof(string));
child.TableName = "ParentChild";
child.Columns.Add("ID", typeof(int));
child.Columns.Add("ParentID", typeof(int));
child.Columns.Add("ChildName", typeof(string));
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(objDemo.ChildsList);
XmlNodeList objNL = xmlDoc.GetElementsByTagName("option");
int parentIndex = 0;
foreach (XmlNode objSingleNode in objNL)
{
parent.Rows.Add(parentIndex, objSingleNode.Attributes.GetNamedItem("name").InnerText);
XmlDocument xmlChildren = new XmlDocument();
xmlChildren.LoadXml(objSingleNode.InnerXml);
XmlNodeList objCL = xmlChildren.GetElementsByTagName("child");
int childIndex = 0;
foreach (XmlNode objSingleChild in objCL)
{
child.Rows.Add(childIndex, parentIndex, objSingleChild.InnerText);
childIndex++;
}
parentIndex++;
}
data.Tables.Add(parent);
data.Tables.Add(child);
data.Relations.Add("ParentChild", parent.Columns["ID"], child.Columns["ParentID"]);
bindingSource1 = new BindingSource();
bindingSource1.DataSource = data;
bindingSource1.DataMember = "Parent";
bindingSource2 = new BindingSource();
bindingSource2.DataSource = bindingSource1;
bindingSource2.DataMember = "ParentChild";
DropDownList lstList1 = new DropDownList();
lstList1.ID = "ParentList";
lstList1.SelectedIndexChanged += lstList1_SelectedIndexChanged;
lstList1.DataSource = bindingSource1;
lstList1.DataTextField = "Name";
lstList1.DataValueField = "Name";
lstList1.AutoPostBack = true;
lstList1.DataBind();
DropDownList lstList2 = new DropDownList();
lstList2.ID = "ChildList";
lstList2.DataSource = bindingSource2;
lstList2.DataTextField = "ChildName";
lstList2.DataValueField = "ChildName";
lstList2.DataBind();
this.dynamicControl.Controls.Add(
new LiteralControl(
"<tr><td width='220px' class='contentBoxLabel'>" + sbDisplayLabel + " - Country" + "</td><td>"));
this.dynamicControl.Controls.Add(lstList1);
this.dynamicControl.Controls.Add(new LiteralControl("</td></tr>\n"));
this.dynamicControl.Controls.Add(
new LiteralControl(
"<tr><td width='220px' class='contentBoxLabel'>" + sbDisplayLabel + "</td><td>"));
this.dynamicControl.Controls.Add(lstList2);
的的SelectedIndexChanged为lstList1不工作,这意味着功能lstList1_SelectedIndexChanged永远不会达到,做我需要补充一点,在其他地方?我试着将它添加到Page_load的IsPostBack部分,但我无法找到控件。我的印象是,我需要有一个事件处理程序来更新第二个下拉列表,当第一个被选中时,这是否正确?
答
我觉得有问题,在你注册你的处理器 到事件尝试这样的方式:
lstList1.SelectedIndexChanged += new EventHandler(lstList1_SelectedIndexChanged);
lstList1.AutoPostBack = true;
void lstList1_SelectedIndexChanged(object sender, EventArgs e)
{
//your code
}
+0
我试过这个,并且得到了相同的结果。我也在Page_LoadComplete部分尝试了这一点,但它不起作用。 –
欢迎SO。你的经理在哪里?这是什么意思“不工作”?请在阅读本文之前阅读以下内容:https://stackoverflow.com/help/mcve –