日期:2014-05-17  浏览次数:20555 次

请教一下关于在Gridview里动态添加控件后使用FindControl方法的问题
本帖最后由 phenemenon 于 2010-11-27 21:35:54 编辑
现在我有一个GridView(启用OnRowDataBound方法,用BoundField设计了第一列,第二列为TemplateField)和一个Button,当Page_Load时,读取数据库,DataBind()到GridView,然后触发OnRowDataBound方法,在里面使用e.Row.Cells[1].Controls.Add(textbox)给第二列都加一个TextBox

然后点击Button,在onclick事件中,使用String Tvalue = ((TextBox)gridview.Rows[i].Cells[2].FindControl("textbox")).Text;

结果是空的,出错,而且设置断点后看到Cells[2].Controls.Count=0,为什么会这样啊……我第一列的值都取出来了,第二列怎么会找不到控件呢

OnRowDataBound代码如下:

protected void GridViewProductyAttributeShow_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        TextBox textbox = new TextBox();        
        textbox.ID = "textbox";
        if (e.Row.RowType == DataControlRowType.DataRow)
                    e.Row.Cells[1].Controls.Add(textbox);      
    }


OnClick代码如下:

for (int i = 0; i < GridViewProductyAttributeShow.Rows.Count; i++)
        {
                String ProductAttributeGuid = GridViewProductyAttributeShow.Rows[i].Cells[0].Text;
                TextBox textbox_AtrrbuteValue = GridViewProductyAttributeShow.Rows[i].FindControl("textbox") as TextBox;//找不到?
                String AtrrbuteValue = textbox_AtrrbuteValue.Text;
        }

------解决方案--------------------
render的时候产生的
TemplateField中直接添加textbox
foreach (GridViewRow gr in this.GridView1.Rows)
{
  TextBox txt = (TextBox)gr.FindControl("TextBox的ID");


 

------解决方案--------------------
如果你是如下绑定的,将if(!IsPostBack)去掉就可以了!
    protected void Page_Load(object sender, EventArgs e)
    {
        //if (!IsPostBack)
            bind();//绑定
        
    }
------解决方案--------------------
 TextBox textbox_AtrrbuteValue = GridViewProductyAttributeShow.Rows[i].FindControl("textbox") as TextBox;//找不到?

改为
TextBox textbox_AtrrbuteValue = GridViewProductyAttributeShow.Rows[i].Cells[1].FindControl("textbox") as TextBox;//找不到?

 
------解决方案--------------------
  protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack) // 加载事件加IsPostBack 判断
  bind();//绑定
   
  }


------解决方案--------------------