在ASP.NET中的GridView中检索动态生成的TextBox内容

时间:2015-01-29 06:40:51

标签: asp.net

我有GridView2的以下RowDataBound方法

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                List<TextBox> list = new List<TextBox>(); 
                if (ViewState["Table"] != null)
                    Assessments = (DataTable)ViewState["Table"]; 
                int count = 1;
                foreach (DataRow row in Assessments.Rows)
                {
                    TextBox txt = new TextBox();
                    txt.ID = "AsTxt"; 
                    txt.Text = string.Empty;
                    txt.TextChanged += OnTextChanged; 
                    e.Row.Cells[count].Controls.Add(txt);
                    count += 2;
                    listd.Add((e.Row.DataItem as DataRowView).Row[0].ToString() + "Txt");
                }
            }
        }

以下事件(按钮单击)检索GridView中文本框中的任何内容

protected void CalculateBtn_Click(object sender, EventArgs e)
        {
            GridViewRow rr = GridView2.Rows[0];
            TextBox rrrr = (rr.FindControl("AsTxt") as TextBox); 
            ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('" + rrrr.Text + "')", true);
        }

我总是得到NullReferenceException。这意味着TextBox对象(rrrr)始终为null。我确信文本对象位于GridView2.Rows [0]中。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

这是asp中Dynamical创建的控件的已知问题。因此,如果您想在postback上使用创建的控件,那么我建议您在page_int之外声明控件并在init中进行初始化,然后使用它们的名称而不是查找控件。

看看这个可能对你有用的博客

http://techbrij.com/retrieve-value-of-dynamic-controls-in-asp-net