我现在有一个datatable里面有一些数据,已经绑定在gridview中,之后我用这段程序绑定textbox控件: protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                for (int i = 1; i <= dtTable.Columns.Count - 1; i++)
                {
                    TextBox txt = new TextBox();
                    txt.ID = "a" + i + e.Row.RowIndex;
                    txt.Width = 200;
                    e.Row.Cells[i+1].Controls.Add(txt);
                }
            }
        }
现在想在button的click事件中去gridview单元格中的textbox的值,可是 取不到,不知道是什么问题 求大神指教,取值代码如下: 
 foreach (GridViewRow j in GridView1.Rows)
            {
                for (int i = 1; i < GridView1.Rows[j.RowIndex].Cells.Count; i++)
                {
                    string x = "a" + i + j.RowIndex;
                    TextBox tb = (TextBox)j.FindControl(x);
                    if (tb.Text == "")
                    {
                        num = 0;
                    }
                    else
                    {
                        num = Convert.ToInt32(tb.Text);
                    }
                 }
            }
 

解决方案 »

  1.   

    动态添加的添加的空间,回发后值丢失了
    你把这个事件在page_load中调用下,再看看能否取到值,注意不要写到!page.ispostback里面
    GridView1_RowDataBound(null,null);
    e.Row.RowIndex搞个自增变量代替下
    if (!page.ispostback)
    {}
    else
    {
         protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    for (int i = 1; i <= dtTable.Columns.Count - 1; i++)
                    {
                        TextBox txt = new TextBox();
                        txt.ID = "a" + i + e.Row.RowIndex;
                        txt.Width = 200;
                        e.Row.Cells[i+1].Controls.Add(txt);
                    }
                }
            }
    }
      

  2.   

    这样就可以取到,示例:
    protected void Page_Load(object sender, EventArgs e)
    {
    SQLiteData md = new SQLiteData();
    md.ExecuteReader("select * from city limit 10");
    GridView1.DataSource = md.Reader;
    GridView1.DataBind();
    md.Close();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
    TextBox tb = new TextBox() { ID = "tb" + e.Row.RowIndex };
    e.Row.Cells[0].Controls.Add(tb);
    }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
    foreach (GridViewRow row in GridView1.Rows)
    {
    TextBox tb = row.FindControl("tb" + row.RowIndex) as TextBox;
    Response.Write(tb.Text + "<br/>");
    }
    }
      

  3.   

    主要是回发后GridView1_RowDataBound没有被执行,所以那些文本框都丢失了。