当前位置:编程学习 > C#/ASP.NET >>

怎样获取gridview中动态生成的textbox的值

动态生成出来的textbox根据id获取不到值,用什么办法可以获取呀? --------------------编程问答-------------------- 需要从TextBox所在的容器内取。比如:放在GridView中就需要gridView1.FindControl(id) as TextBox
其次,注意获取的时候是否经过了什么动作,页面回发等问题。 --------------------编程问答--------------------
引用 1 楼 rock870210 的回复:
需要从TextBox所在的容器内取。比如:放在GridView中就需要gridView1.FindControl(id) as TextBox
其次,注意获取的时候是否经过了什么动作,页面回发等问题。

+1 --------------------编程问答-------------------- 都一样的呀,用findcontrol()。 --------------------编程问答-------------------- 是的
TextBox tb=GridView1.FindControl(id) as TextBox;
if(tb!=null)
{
  string text=tb.Text;
} --------------------编程问答-------------------- 用个比较不给力的方法,给gridview的主div加上一个div_onclick("<%#id%>")事件,onclick事件传入的参数为image的id,再<script>var i=0 function div_conclick(a){var b=document.getElementById(a); if(i%2==0) b.src="图片地址1"; else b.scr="图片地址2"; i=i+1;} --------------------编程问答-------------------- Request.Form取值
findcontrol --------------------编程问答-------------------- 上面的几种方法我都试了,不可以,动态生成出来的id用这种方法就获取不到了,总是报未将对象引用到实例 --------------------编程问答-------------------- 你把div 设成runat=“server”,你再看看打开网页再看页面代码,你会发现ID的规律的 --------------------编程问答--------------------   for(int i =0 ;i<gridView1.rows.Count;i++)
{
   TextBox  tbx1 =(TextBox) GridView1.FindControl(id);
   //这里写逻辑
} --------------------编程问答-------------------- 上一篇错了
for(int i =0 ;i<gridView1.rows.Count;i++)
{
  TextBox tbx1 =(TextBox) GridView1.Rows[i].FindControl(id);
  //这里写逻辑
} --------------------编程问答-------------------- protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //e.Row.Cells[0].Text = ((TStudent)e.Row.DataItem).Id.ToString();
            //e.Row.Cells[1].Text = ((TStudent)e.Row.DataItem).Name.ToString();
           // e.Row.Cells[2].Text = ((TStudent)e.Row.DataItem).Age.ToString();
            TextBox txt1 = e.Row.FindControl("txtID") as TextBox;
           
        }
    } --------------------编程问答-------------------- protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[3].Text = Convert.ToDateTime(e.Row.Cells[3].Text).ToShortDateString();
        }
    }


e.Row.RowType  是指当前行的类型
DataControlRowType 是GridView的行的类型集合  其中的DataRow是数据绑定行

这个判断语句的意思就是判断当前行是不是数据绑定行

是绑定时候用来过滤标题行和序号行等等非数据绑定行的

其中的3只是随机写的,真实的应该是你要查询的那个textBox所在的列号

--------------------编程问答-------------------- http://download.csdn.net/source/1795477

这里有例子 --------------------编程问答-------------------- http://download.csdn.net/source/1795477

这个 --------------------编程问答-------------------- 如果生成的textbox放入PlaceHolder控件里,直接用ID可以获取
如果直接放在form,用Request[name]取值 --------------------编程问答-------------------- int id = Convert.ToInt32(((TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[0]).Text);

试试看,cells[0]这个根据位置而定 --------------------编程问答-------------------- 都是在这里说嘴,人家是动态生成的TextBox,然后把TextBox里面的数据修改了以后,要在后台更新数据库的。
因为是动态生成的TextBox,所以每次更新时,都很重新加载生成TextBox的函数部分。
TextBox里面的数值还是最开始初始化的值。得不到更新后的 --------------------编程问答-------------------- ((TextBox)(GridView1.Rows[e.RowIndex].Cells[0].Controls[0])).Text --------------------编程问答-------------------- findcontrol --------------------编程问答-------------------- 如果是后台更新数据库后的数据,就应该在提交texbox的更新后的值的时候刷新GridView重新绑定啊。
要不然计算机怎么判断,即使后台取到值了没重新绑定当然没法判断新ID了 --------------------编程问答--------------------
引用 12 楼  的回复:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[3].Text = Convert.ToD……

说的有道理,把数据加个for循环就行了
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,