生成多个DropDownLists

时间:2010-08-05 13:53:03

标签: asp.net

我必须在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”是静态变量。

“serarch2”是带有runat服务器标签的html表

问题是只有一个控件得到了数百, 之后,在每次额外点击时,相同的DropDownList将被替换。 没有新的DropDownList添加到页面。

谢谢。

1 个答案:

答案 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的强制性链接。