0

这是一个ASP的一个样本:文本框如何在代码后面动态添加asp:TextBox? (不文本区)

<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Always"> 
     <ContentTemplate> 
      <asp:TextBox runat="server" ID="MyBox" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

在后面的代码我得到了很多来自DB数据,我想创建相应asp:TextBox文本框。

是否可以从代码后面添加UpdatePanel asp:TextBox

的背后代码:

protected void Page_Load(object sender, EventArgs e) 
    { 
     int numberOfItems = AccountsBank.Bank_DAL.GetNumberOfActiveAccount(); 

     // create 'numberOfItems' asp:TextBox 
    } 

请注意,我不是在寻找一个文本区域,我需要的是多asp:TextBox的。

你的帮助是非常赞赏

+0

也许使用占位符并将您创建的文本框动态添加到此占位符。此外,请检查这个http://stackoverflow.com/questions/14816760/how-to-dynamically-create-textboxes-using-asp-net-and-then-save-their-values-in –

回答

3

与创建控件程序上的问题是,你需要确保你创建它们每一个回发。有了这样的说法,更简单和更稳定的方法就是使用中继器。然后,您可以根据帐户数重复多少个文本框。就像这样:

标记:

<asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
      <asp:Repeater ID="myRep" runat="server"> 
       <ItemTemplate> 
        <asp:TextBox runat="server" ID="MyBox" /> 
       </ItemTemplate> 
      </asp:Repeater> 
    </ContentTemplate> 
</asp:UpdatePanel> 

代码bebind:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     int numberOfItems = AccountsBank.Bank_DAL.GetNumberOfActiveAccount(); 
     myRep.DataSource = Enumerable.Range(0, numberOfItems).ToList(); 
     myRep.DataBind(); 
    } 
} 

参考:

+0

这可能是更好的方法,+1 – Adimeus

+0

非常棒的解决方案,谢谢! – ron

+0

@ron:没问题。乐意效劳 – Arion

1

为了控制编程方式添加到页面,必须有新的控制的容器。例如,如果您正在创建表格行,则该容器就是表格。如果没有明显的控件充当容器,则可以使用PlaceHolder或Panel Web服务器控件。

<asp:PlaceHolder ID="container" runat="server" />

这个容器取了一个名字,'容器',你可以在后面的代码调用。

foreach(DataRow dataRow in dataTable.Rows) 
{ 
    TextBox tb = new TextBox(); 
    tb.Name = "tb_" + dataRow.Id; 
    tb.Text = dataRow.Content; 
    container.Controls.Add(tb); 
} 
相关问题