2011-07-20 91 views
0

我有一個創建n個面板的中繼器。我正試圖動態地爲每個面板添加不同的控件。我很可能會以錯誤的方式去做這件事。如何動態地將控件添加到動態創建的面板?

我的代碼是或多或少:

的.aspx:

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <% Response.Write("<asp:panel runat=\"server\" id=\"uxPanel_"); %> 
     <%# DataBinder.Eval(Container.DataItem, "TableId")%><% Response.Write("\"></asp:panel>"); %> 

    </ItemTemplate> 
</asp:Repeater> 

的.cs:

public partial class class1: System.Web.UI.Page 
{ 
    DataSet ds= null; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    GetRecords(1,1); 
} 

protected void GetRecords() 
{ 
    ds= dal.LoadRecords(); 

    this.Repeater1.DataSource = ds.Tables[0]; 
    this.Repeater1.DataBind(); 


    Literal lit = new Literal(); 
    lit.Text = "Some text"; 
    this.FindControl("uxPanel_1").Controls.Add(lit);   


} 

}

只是要在這個例子中明確的「DAL。 LoadRecords「只是調用一個從DB中檢索某些記錄的方法。

我認爲我的問題是我如何在第一個地方添加我的面板,但這似乎是一個簡單的方法讓它們具有唯一的名稱。

任何指針?

謝謝

+0

自發布以來,我開始認爲一個更好的方法是在我的頁面上創建一個面板,然後根據需要創建面板,向這些面板添加控件,然後將它們添加到原始靜態面板。這是更合適的方法嗎? – Curtis

+0

<%Response.Write(「這一行當然不會創建由Panel控件生成的DIV元素.... –

回答

0

正如前面的回答者所說,這充滿了危險!

如果你必須:我應該完全拋棄中繼器的方法。

創建容器面板或佔位符,並在後面的代碼中動態添加面板到使用ContainerPanel.Controls.Add(newPanel);

如果需要,您的孩子「面板」可能是UserControl。

請注意,您必須重新生成回發時的動態控件。

0

指針?是:請勿動態添加控件!

動態添加控件會增加很多開銷,並會遇到視圖狀態問題。通常,這不值得花時間和頭痛。

面板,以及面值,佔位符,和所有其他ASP.NET控件有一個Visible屬性,你可以打開和關閉,就像這樣:

myPanel.Visible=true; 
    myOtherPanel.Visible = false; 
    myTogglePanel.Visible = ! myTogglePanel.Visible; //toggle it's visibility 

這種做法是非常非常容易。

+0

是的,如果你可以,但有時候這是必要的。對於未來這個頁面的訪問者來說,直接回答這個問題也不是一個壞主意。 –

相關問題