【问题标题】:Find textbox control in ASP dynamic table在 ASP 动态表中查找文本框控件
【发布时间】:2015-04-23 03:41:32
【问题描述】:

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

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;

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

谢谢!

【问题讨论】:

  • 尝试重新绑定网格。
  • 需要递归查找控件。

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


【解决方案1】:

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

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

您可以将该代码放在您的Page_Load 中的if(!IsPostBack) 代码块之外,这样您就可以使用它。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多