我想动态生成GridView,在列里添加了TextBox控件~~~在TextBox里修改数据后,按“确定”按钮保存修改结果,但是PostBack后,GridView里的TemplateField都消失了,获取不了那些经过修改的数据。
如果把每一个动态生成的文本框控件写到一个hidden元素里,可以用逗号分割,在提交的时候根据hidden元素里的值来得到所有TextBox的Name,再用Request.Form["TextBox的Name"]得到其值,请问hidden元素在这里要怎样使用呢?

解决方案 »

  1.   

    修改的值,同时赋值给hidden.value一个,用法和string类型一样。
      

  2.   

    请问是不是要添加一个Hidden控件啊,我对这个不了解,谢谢。
      

  3.   

    for(int i=0;i<this.gridview.rows.count;i++)

    this.hidden控件的ID.value  +=((TextBox)gvSMPList.Rows[i].Cells[typeColumn].Controls[1]).Text.tostring();
    }这样不就能把每个TextBox中的值累计加到Hidden控件上了,将以上代码写在button事件中看看行不
      

  4.   

    拖一个hidden,或直接用ViewState存
      

  5.   

    <input type="hidden" name="hideV" id="hideV"/><!---把这个放入表单中---->然后提交表单时把动态生成的控件的name搜集好后给hidden赋值
    string hideV=Request.Form["hidev"];
    string[] arrHideV=hideV.Split("js分隔name的分隔符号");//这个就是你需要的动态生成的textbox的name的集合了
      

  6.   

    3楼的方法不行啊,button事件一旦触发,Page_Load事件是一起执行的
      

  7.   

    比较习惯上是用js获取到textbox中的值,像lz所说的就是遍历textbox的值,赋值到一个hidden的控件内,你可以参考上网上的一些checkbox的全选或反选什么的,一样的原理的.在提交时添加个事件就可以了.
      

  8.   

    for(int i=0;i <this.gridview.rows.count;i++) 

    this.hidden控件的ID.value  +=((TextBox)gvSMPList.Rows[i].Cells[typeColumn].Controls[1]).Text.tostring(); 

    这段代码,要放在那里好?
      

  9.   

    你应该加上判断
    page_load()
    {
       if(!isPostBack)
        {
         代码
       }
    }这样的话应该就不会没有值了。
      

  10.   

    拖一个hidden控件,将值绑定
    在PageLoad里面加if(!IsPostBack)判断
      

  11.   

    生产gridview的代码放在if(!ispageback)中
    且不要指定EnableViewState=false
      

  12.   

    把动态生成GridView的代码放到页面的Page_Init事件中,不要放在Page_Load中你不用把TextBox的Name放到Hidden控件中,因为是动态生成的,所以TextBox的ID是可以在程序中自己指定的,如:初使化:
    ...
    TextBox tb1 = new TextBox();
    GridView.Rows[1].Controls.Add(tb1);
    ...获取ta1的值:
    string tb1Value = ((TextBox)GridView.Rows[1].FindControl("tb1")).Text;
    ...(代码只是示例,随手写的,可能有小问题,请再适当修改)