[英]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.