循环通过动态面板内的动态文本框(内部占位符)

时间:2013-07-15 14:08:19

标签: c# asp.net

我有placeholder用于动态创建文本框以及用于在客户端删除这些文本框的按钮。

添加控件的功能:

    Panel panel = new Panel();
    Button btn = new Button { Text = "Remove" };
    btn.Click += btnRemove_Click;
    panel.Controls.Add(btn);
    panel.Controls.Add(new TextBox { ID = string.Concat("txtContractor", index) });
    placeHolder.Controls.Add(panel);

这些控件位于没有ID的panel内。每当发生回发时都会重新添加它们,所以我认为不是问题所在。

我的问题是如何格式化foreach循环以从面板内的文本框中获取文本

foreach (Control ctrl in placeHolder.Controls)
{
    if (ctrl is Panel)
    {
        //for each control inside this panel
        //{
              //if it is textbox
              //{ 
                  //do whatever 
              //}
        //}
     }            
}

2 个答案:

答案 0 :(得分:1)

您可以使用Enumerable.OfType

foreach (Control ctrl in placeHolder.Controls)
{
    if (ctrl is Panel)
    {
        // Get each ID and Text from TextBox
        var textBoxes = ctrl.Controls.OfType<TextBox>()
                                     .Select(t => Tuple.Create(t.ID, t.Text))
                                     .ToList();

        foreach(var item in textBoxes)
        {
            //do whatever
        }
    }
}

答案 1 :(得分:1)

您正在使用自己的代码创建这些控件(面板,按钮和文本框)。添加容器(List<TextBox>Dictionary<string, TextBox>)作为Page类的成员,并在创建容器时将文本框添加到此容器中。然后简单地遍历容器项以获取每个文本框。