如何在代码后面动态添加asp:TextBox? (不是TextArea)

时间:2015-01-15 07:45:23

标签: c# asp.net visual-studio-2012 visual-studio-2013 code-behind

这是一个asp:TextBox

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

在我背后的代码中,我从数据库中获取了大量数据,并且我想创建相应的asp:TextBox文本框。

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

背后的代码:

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

        // create 'numberOfItems' asp:TextBox 
    }

请注意,我不是在寻找TextArea,我需要的是多个asp:TextBox

非常感谢您的帮助

2 个答案:

答案 0 :(得分: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>

Code 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();
    }
}

参考:

答案 1 :(得分:1)

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

<asp:PlaceHolder ID="container" runat="server" /&GT;

此容器的名称为&#39; container&#39; ,您可以在后面的代码中调用。

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