我必须在clientclick上生成多个下拉列表。 这是每个客户点击的新下拉列表。 我放置了一个按钮并在点击事件上编写了代码。
protected void addReq1_Click(object sender,ImageClickEventArgs e)
{
DropDownList oDdl = new DropDownList();
oDdl.ID = "ddlReq" + (++i).ToString();
oDdl.DataSourceID = "DSUsers";
oDdl.DataTextField = "UName";
oDdl.DataValueField = "UName";
HtmlTableCell tc0 = new HtmlTableCell();
HtmlTableCell tc1 = new HtmlTableCell();
HtmlTableCell tc2 = new HtmlTableCell();
HtmlTableCell tc3 = new HtmlTableCell();
tc2.Controls.Add(oDdl);
HtmlTableRow tr = new HtmlTableRow();
tr.Cells.Add(tc0);
tr.Cells.Add(tc1);
tr.Cells.Add(tc2);
tr.Cells.Add(tc3);
search2.Rows.Add(tr);
}
这里“DSUsers”是SqlDataSource。
“i”是静态变量。
问题是只有一个控件得到了数百, 之后,在每次额外点击时,相同的DropDownList将被替换。 没有新的DropDownList添加到页面。
谢谢。
答案 0 :(得分:1)
当您向页面动态添加任何控件时,它们会在下一次回发时丢失。为了使其工作,您需要在PreInit或Init事件中测试i并在那里创建正确的行数。
for (int x = 0 to i) {
DropDownList oDdl = new DropDownList();
oDdl.ID = "ddlReq" + (++x).ToString();
oDdl.DataSourceID = "DSUsers";
oDdl.DataTextField = "UName";
oDdl.DataValueField = "UName";
HtmlTableCell tc0 = new HtmlTableCell();
HtmlTableCell tc1 = new HtmlTableCell();
HtmlTableCell tc2 = new HtmlTableCell();
HtmlTableCell tc3 = new HtmlTableCell();
tc2.Controls.Add(oDdl);
HtmlTableRow tr = new HtmlTableRow();
tr.Cells.Add(tc0);
tr.Cells.Add(tc1);
tr.Cells.Add(tc2);
tr.Cells.Add(tc3);
search2.Rows.Add(tr);
}
ASP.NET page lifecycle的强制性链接。