自定义组件是GridView中使用了TextBox组件,但在刷新前把数据保存时无法获取到TextBox中的值.是否自定义组件无法实现此功能,如果可以又如何实现,谢谢大侠们!在gvList_RowDataBound中添加TextBox  
TextBox txtPageSize = new TextBox();
  txtPageSize.Text = this.gvList.DataKeys[e.Row.RowIndex]["PageSize"].ToString();
  txtPageSize.Width = 40;
  txtPageSize.ID = "txtPageSize";
  e.Row.Cells[5].Controls.Add(txtPageSize);
在保存相关数据方法是
TextBox txtPageSize = row.FindControl("txtPageSize") as TextBox;
  if (txtPageSize != null)
  {
  if (txtPageSize.Text != "")
  {
  dr["PageSize"] = (txtPageSize.Text == "" ? null : txtPageSize.Text);
  }
  }
txtPageSize为空,找不到此组件

解决方案 »

  1.   

    当然不是,GridView中使用了TextBox,那么textBox就在父容器中,在GridView中,要先找到父容器容再找到字控件。差不多这样吧,你自己试一下
    [TextBox]GridView1.Controls[0].FindControl("textbox");
      

  2.   

    好像还是不行,下面的就是我的源码,我修改后还是不行.
    foreach (GridViewRow row in this.gvList.Rows)
    {
        //页数
        TextBox txtPageSize = row.Cells[5].FindControl("txtPageSize") as TextBox;
        if (txtPageSize != null)
        {
          if (txtPageSize.Text != "")
          {
            dr["PageSize"] = (txtPageSize.Text == "" ? null : txtPageSize.Text);
          }
    }
                   
      

  3.   

    因为回发的时候没有走你的GridView的DataBind方法,所以也就不会触发RowDataBound事件,没触发这个事件也就意味着你的TextBox根本就没有动态添加,这时候你去取TextBox当然是空的,劝你先了解一下asp.net的页面生命周期再来写自定义控件或用户控件。
    http://blog.csdn.net/ojlovecd/article/details/2691116
      

  4.   

    在获取TextBox中的值时不是RowDataBound事件中,是另外的事件中调用,RowDataBound事件中只是绑定了TextBox控件.
      

  5.   

    估计我给你的链接你看都没看吧?
    页面回发的时候,控件的状态将会回复初始值。
    由于GridView没有执行DataBind,所以RowDataBound事件没有触发,所以在回发的时候不管在哪个事件里你都不可能获取得到TextBox的
    或许你只是来要代码的,我上面所说的话,你可以直接无视。
      

  6.   

    我看过你给我的链接信息,但还是不太明白呀,能否解释一下呢?
    gvList_RowDataBound中在GRIDVIEW中的每一行中的一列绑定了TEXTBOX;
    通过Button服务器控件的 Click 事件中保存GridView中每一行的TEXTBOX中有值保存到全局变量中去后刷新页面,而在CLICK事件中无法获取到TEXTBOX中的值;