0

我有一个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);

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

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

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

2 回答 2

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
        }
    }
}
于 2013-07-15T14:19:34.540 回答
1

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

于 2013-07-15T14:30:27.357 回答