如何在ASP.NET中的GridView单元格中检索动态生成的TextBox的内容

时间:2015-01-29 10:11:14

标签: asp.net gridview

我有一个GridView,其中的行代表学生和不同科目的标记列。学生人数多变。因此,GridView中的行数未知。输入标记的用户将指定运行时的学生数。每行都有一个TextBox用于每个主题。

用户点击计算按钮后,我需要检索所有TextBoxes中的值。

我尝试了以下代码:

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

对于计算按钮:

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,即rrrr为null。

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

您需要按行

中的单元格no访问文本框
protected void CalculateBtn_Click(object sender, EventArgs e)
        {
            GridViewRow rr = GridView2.Rows[0];

            TextBox rrrr = (rr.Cells[0].FindControl("AsTxt") as TextBox); 
            ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('" + rrrr.Text + "')", true);
        }

目前我已将0设置为单元格索引,根据gridview行更改它。

答案 1 :(得分:0)

我认为您可以在页面加载时添加数据,以便asp.net自动保留视图状态。所以你的控件会出现。总是需要在页面加载值中添加控件,由asp.net自动跟踪。