我正在尝试创建一个将未定义行数加载到表中的页面,每行包含两列,一列包含字符串,另一列包含TextBox。当我单击提交按钮时,我希望能够检索输入到每个TextBox中的值。
我可以做的前半部分,显然在真实的代码中,这将是一个foreach循环,文本框ID分配了一个唯一的值,我可以在以后重现它来调用它。
TableCell myCell = new TableCell();
myCell.Text = "StudentID";
TableCell nextCell = new TableCell();
TextBox mytext = new TextBox();
mytext.ID = "TxtBox1";
nextCell.Controls.Add(mytext);
TableRow myRow = new TableRow();
myRow.Cells.Add(myCell);
myRow.Cells.Add(nextCell);
TableStuUploads.Rows.Add(myRow);
当我点击我的提交按钮时,我尝试运行此代码(只是临时代码ATM,概念证据):
TextBox tmptext = (TextBox)FindControl("TxtBox1");
Label1.Text = tmptext.Text;
但是将tmptext设置为null,我在下一行得到一个空指针异常。所以我试过
TextBox tmptext = (TextBox)TableStuUploads.FindControl("TxtBox1");
Label1.Text = tmptext.Text;
同样的错误。然后我试了
foreach (Control x in TableStuUploads.Controls)
{
if (x.GetType().ToString().Equals("System.Web.UI.WebControls.TextBox"))
{
Label1.Text = ((TextBox)x).Text;
}
}
但是在调试时,我看到TableStuUploads.Controls的计数为零。
我该如何解决这些动态创建的控件?我已经四处寻找了,我得到的答案就是我已经尝试过的三种解决方案。我哪里错了?
答案 0 :(得分:2)
您可能无法在回发时重新创建动态控件。这是查找每个控件并检索每个控件的值所必需的。
此外,最好使用转发器来创建这些控件,它更易于维护和调试。
答案 1 :(得分:1)
修改强>
你需要在每个回发(page_load)上重新创建你的表,就像@ShaiCohen在他的回答中说的那样你需要一些ilke:
foreach (TableRow item in TableStuUploads.Rows)
{
TextBox tmptext = (TextBox)item.FindControl("TxtBox1");
Label1.Text = tmptext.Text;
}