在 ASP 动态 table 中查找文本框控件
Find textbox control in ASP dynamic table
我正在动态创建一个包含文本框的 table。我正在使用以下代码这样做:
foreach (DataRow row in Score_Sheet.Rows) // Loop over the rows.
{
int rowIndex = Score_Sheet.Rows.IndexOf(row); // Not sure if i need this yet
Label label = new Label();
TextBox txt = new TextBox();
txt.Text = row["Value"].ToString();
txt.ID = row["Risk"].ToString();
label.Text = row["Risk"].ToString() + " = ";
rows = new TableRow();
cell = new TableCell();
cell.Controls.Add(label);
cell2 = new TableCell();
cell2.Controls.Add(txt);
rows.Controls.Add(cell);
rows.Controls.Add(cell2);
SSGrid.Controls.Add(rows);
}
这是通过以下代码向我的网页添加 Table:
<asp:Table ID="SSGrid" runat="server"></asp:Table>
table 正在正确填充,但是当我尝试从 table 中的文本框访问更新后的值时,出现空引用异常。
我的查找控制代码是这样的:
TextBox txt_any = (TextBox)SSGrid.FindControl("ANY");
string anyany = txt_any.Text;
row1["Value"] = any;
如何访问此文本框中正在更新的值?
谢谢!
由于您在此处使用动态生成的控件,为了访问它们或它们的值,您必须在回发页面时重新创建它们。这是因为动态控件在视图上呈现后会丢失其状态,并且在回发后再次使用它们的唯一方法是在代码隐藏中重新创建它们。
所以在这里,您只需要使用您第一次创建它时使用的代码重新创建 table。
您可以将该代码放在 Page_Load
中的 if(!IsPostBack)
代码块之外,这样您就可以开始了。
希望对您有所帮助。
我正在动态创建一个包含文本框的 table。我正在使用以下代码这样做:
foreach (DataRow row in Score_Sheet.Rows) // Loop over the rows.
{
int rowIndex = Score_Sheet.Rows.IndexOf(row); // Not sure if i need this yet
Label label = new Label();
TextBox txt = new TextBox();
txt.Text = row["Value"].ToString();
txt.ID = row["Risk"].ToString();
label.Text = row["Risk"].ToString() + " = ";
rows = new TableRow();
cell = new TableCell();
cell.Controls.Add(label);
cell2 = new TableCell();
cell2.Controls.Add(txt);
rows.Controls.Add(cell);
rows.Controls.Add(cell2);
SSGrid.Controls.Add(rows);
}
这是通过以下代码向我的网页添加 Table:
<asp:Table ID="SSGrid" runat="server"></asp:Table>
table 正在正确填充,但是当我尝试从 table 中的文本框访问更新后的值时,出现空引用异常。
我的查找控制代码是这样的:
TextBox txt_any = (TextBox)SSGrid.FindControl("ANY");
string anyany = txt_any.Text;
row1["Value"] = any;
如何访问此文本框中正在更新的值?
谢谢!
由于您在此处使用动态生成的控件,为了访问它们或它们的值,您必须在回发页面时重新创建它们。这是因为动态控件在视图上呈现后会丢失其状态,并且在回发后再次使用它们的唯一方法是在代码隐藏中重新创建它们。
所以在这里,您只需要使用您第一次创建它时使用的代码重新创建 table。
您可以将该代码放在 Page_Load
中的 if(!IsPostBack)
代码块之外,这样您就可以开始了。
希望对您有所帮助。