我有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
//}
//}
}
}
答案 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
类的成员,并在创建容器时将文本框添加到此容器中。然后简单地遍历容器项以获取每个文本框。