2010-08-05 42 views
1

我必须在clientclick上生成多个下拉列表。 这是每个客户端点击的新下拉列表。 我放了一个按钮,并在点击事件上写了代码。生成多个DropDownLists

保护无效addReq1_Click(对象发件人,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服务器标签

的问题是只有一个控制是越来越rendred, 之后每个额外的点击是越来越更换相同DropDownList的HTML表格。 没有新的DropDownList被添加到页面。

谢谢。

回答

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

+0

谢谢杰森, 在这里我失去了生成新的DDL后,在威望ddl(dropdownlist)中选定的值,可能在这里每次我们重新创建以前的DDL的。但是如何克服这个问题。 – Gokul 2010-08-05 15:52:09

+0

按照以下链接将上面的代码移动到Init或PreInit事件:http://stackoverflow.com/questions/3019760/access-values-of-controls-dynamically-created-on-postback – 2010-08-05 16:22:21