我有一个页面,其中包含5个texbox,每个名称相似,但后缀为数字。例如:
tbNumber1,tbNumber2,tbNumber3等等。
之所以这样,是因为那些文本框是根据某些参数动态生成的。我永远不知道特定记录需要多少文本框。
如何循环播放这些texbox的文本内容?
我的第一直觉是做以下事情,但这显然不起作用:)
for (int i = 0; i <= 3; i++)
{
string foo = tbNumber+i.Text;
//Do stuff
}
Wahts是通过这些文本框的最佳方式吗?
感谢!!!
答案 0 :(得分:4)
你可能会做这样的事情:
for( int i = 0; i < upperLimit; i++ )
{
TextBox control = Page.FindControl("tbNumber" + i) as TextBox;
if( control != null ) {
// do what you need to do here
string foo = control.Text;
}
}
答案 1 :(得分:0)
如果您使用CheckBoxList控件,则应该能够遍历控件中的每个复选框。
foreach(var checkbox in checkboxlistcontrol)
{
string name = checkbox.Text;
}
如果您没有使用CheckboxList控件,则可能需要考虑使用一个作为选项。
答案 2 :(得分:0)
可能会尝试类似
的内容foreach(Control control in Page.Controls)
{
//Do stuff
}
答案 3 :(得分:0)
如果您是动态生成它们,请在生成它们时将它们放在List<TextBox>
中:
// in the Page_Load or whereever you generate the textboxes to begin
var boxes = new List<TextBox>();
for (int i = 0; i < numRecords /* number of boxes */; i++) {
var newBox = new TextBox();
// set properties here
boxes.Add(newBox);
this.Controls.Add(newBox);
}
现在,您可以在不使用繁琐的字符串技术的情况下遍历文本框:
foreach (var box in boxes) {
string foo = box.Text;
// stuff
}
答案 4 :(得分:0)
你需要的是一个递归的FindControl之类的函数。尝试这样的事情:
for (int i=0; i<3; i++)
{
Control ctl = FindControlRecursive(Page.Controls, "tbNumber", i.ToString());
if (ctl != null)
{
if (ctl is TextBox)
{
TextBoxControl tbc = (TextBox)ctl;
// Do Something with the control here
}
}
}
private static Control FindControlRecursive(Control Root, string PrefixId, string PostFix)
{
if (Root.ID.StartsWith(PrefixId) && Root.ID.EndsWith(PostFix))
return Root;
foreach (Control Ctl in Root.Controls)
{
Control FoundCtl = FindControlRecursive(Ctl, PrefixId, PostFix);
if (FoundCtl != null)
return FoundCtl;
}
return null;
}