1

我的 ASP.NET 页面上有 16 个文本框,我想将它们的文本值设置为等于我的字符串数组中的各种值。

在我的 .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”的最简单方法是什么?如果可能的话,我想查看代码示例。

4

4 回答 4

4

只需创建一个数组或List对象Textbox

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];
}
于 2012-12-27T20:15:26.613 回答
1

将它们分组到 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++; 
}

在 2 行中使用 Linq(并且比上面更安全):

int i = 0;
place.Controls.OfType<TextBox>().AsParallel().ForAll(x => x.Text = stringArray[i++]);    
于 2012-12-27T20:14:08.507 回答
1

尝试以“myTarget_”开头的所有 textbox.id 命名,然后再命名。然后使用 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++; }

您可能需要稍微调整一下代码。

于 2012-12-27T20:26:37.913 回答
0

占位符/面板/div 似乎是一个合适的选择。然后,您可以要求占位符的所有子代。

另一种选择是给他们所有有意义和连续的名字..比如说:stringArrayTextbox1 .. stringArrayTextboxN

然后使用 FindControlByID 来获得您的控制权。

我最喜欢 FindControlByID 方法——这意味着容器控件中文本框的顺序不必与数组的顺序相匹配。

于 2012-12-27T20:15:17.643 回答