在ASP动态表中查找文本框控件

时间:2015-04-23 03:41:33

标签: c# findcontrol dynamic-controls dynamic-tables

我正在动态创建一个包含文本框的表。我正在使用以下代码:

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);


                }

这是通过以下代码将表格添加到我的网页:

 <asp:Table ID="SSGrid" runat="server"></asp:Table>

表正确填充,但是当我尝试从表中的文本框访问更新的值时,我得到一个空引用异常。

我的查找控制代码是这样的:

TextBox txt_any = (TextBox)SSGrid.FindControl("ANY");
                string anyany = txt_any.Text;
                row1["Value"] = any;

如何访问此文本框中正在更新的值?

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您在此处使用动态生成的控件,为了访问它们或它们的值,您必须在页面回发时重新创建它们。这是因为动态控件在视图上呈现后会丢失其状态,并且在回发之后再次使用它们的唯一方法是在代码隐藏中重新创建它们。

所以在这里,你只需要使用你第一次创建它的代码重新创建表。

您可以将该代码放在if(!IsPostBack)代码块之外的Page_Load中,这样就可以了解这一点。

希望这有帮助。