繁体   English   中英

如何将控件动态添加到动态创建的面板?

[英]How do I add controls dynamically to a dynamically created panel?

我有一个可以创建 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”只是调用一个从数据库中检索一些记录的方法。

我认为我的问题是我如何首先添加我的面板,但这似乎是让它们唯一命名的一种简单方法。

任何指针?

谢谢

指针? 是的:不要动态添加控件!

动态添加控件会增加很多开销,并且会遇到视图状态问题。 通常,不值得花时间和头痛。

面板以及 Literals、PlaceHolders 和所有其他 ASP.NET 控件都有一个 Visible 属性,您可以打开和关闭,如下所示:

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

这种方法要容易得多。

正如前面的回答者所说,这充满了危险!

如果你必须:我应该完全放弃中继器方法。

创建一个容器面板或占位符,并在后面的代码中使用 ContainerPanel.Controls.Add(newPanel); 动态地将面板添加到其中。

如果需要,您的孩子“面板”也可以是 UserControl。

请注意,您必须在回发时重新生成动态控件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM