2010-08-05 56 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