将文本框分组在一起,以便可以通过简单的循环更改其所有属性

本文关键字:循环 属性 简单 可以通过 文本 在一起 | 更新日期: 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方法——它意味着容器控件中文本框的顺序不必与数组的顺序相匹配。