将文本框分组在一起,以便可以通过简单的循环更改其所有属性
本文关键字:循环 属性 简单 可以通过 文本 在一起 | 更新日期: 2023-09-27 17:49:37
我的ASP上有16个文本框。. NET页面,我想将它们的文本值设置为等于字符串数组中的各种值。
在我的。aspx文件中,我这样定义文本框:<asp:TextBox ID="textbox1" runat="server" />
这就是我目前在代码后面的工作方式:
this.textbox1.Text = stringArray[0];
this.textbox2.Text = stringArray[1];
...
this.textbox16.Text = stringArray[15];
但是我想这样做:
int i = 0;
foreach (Textbox tb in GroupOfTextboxes)
{
tb.Text = stringArray[i];
i++;
}
设置"GroupOfTextboxes"最简单的方法是什么?我想看看代码样本,如果可能的话。
创建Textbox
对象的List
数组:
Textbox[] textBoxes = new []{textbox1, textbox2, textbox3, ...};
另一种可能更简单的填充数据结构的方法是将所有文本框放入Panel
或其他某种类型的容器中。然后你可以这样写:
TextBox[] textBoxes = myTextboxPanel.Controls.OfType<TextBox>().ToArray();
这可能是一个可行的选择,也可能不是,但它更简单。它确实需要某种容器,所有的文本框都可以放进去,而不会有任何其他的文本框。
之后,您可以使用for
循环来执行复制:
for(int i = 0; i < textBoxes.Lenth; i++)
{
textBoxes[i].Text = stringArray[i];
}
尝试为所有文本框命名。id以"myTarget_"开头,后面跟着一些东西。然后使用LINQ查找文本框列表:
(From voTB As WebControl In Form.Controls Where left(voTB.ID,9) = "myTarget_" Select voTB)
然后你可以做循环的事情:
int i = 0;
foreach (Textbox tb in (From voTB As WebControl In
Form.Controls Where left(voTB.ID,9) = "myTarget_" Select voTB)) {
tb.Text = stringArray[i]; i++; }
您可能需要稍微调整一下代码
在PlaceHolder中进行分组,如下所示:
<asp:placeholder id="plcHldrTextBoxes" runat="server">
your text boxes here
</asp>
现在在c#中,遍历plcHldrTextBoxes中的控件:
int i=0;
foreach (var textBox in plcHldrTextBoxes.Controls)
{
//dangerous if the cast fails but you get the idea
(textBox as TextBox).Text = stringArray[i];
i++;
}
在两行中使用Linq(并且比上面更安全):
int i = 0;
place.Controls.OfType<TextBox>().AsParallel().ForAll(x => x.Text = stringArray[i++]);
占位符/panel/div似乎是一个合适的选择。然后,您可以请求占位符的所有子节点。
另一个选择是给它们所有有意义和顺序的名字。比如:stringArrayTextbox1 ..stringArrayTextboxN
然后使用FindControlByID来获取你的控件。
我最喜欢FindControlByID方法——它意味着容器控件中文本框的顺序不必与数组的顺序相匹配。