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

ASP.NET 2.0 如何获得GridView中的一行的各列值。

这样做获得的是空值:
string userid = GridView1.Rows[GridView1.EditIndex].Cells[2].ToString(); --------------------编程问答-------------------- 你确定你在编辑状态? --------------------编程问答-------------------- 恩,是在编辑状态。。。 --------------------编程问答-------------------- GridView1.Rows[GridView1.EditIndex].Cells[2].Text.ToString() --------------------编程问答-------------------- ms楼上正解,呵呵. --------------------编程问答-------------------- 顶  楼上的楼上 --------------------编程问答-------------------- up --------------------编程问答-------------------- 要是在编辑列事件中的话 应该是这样写的:
GridViewRow dvr = GridView1.Rows[e.NewEditIndex];
        string id = ((TextBox)dvr.Controls[1].Controls[0]).Text;
        Response.Write(id) --------------------编程问答-------------------- 是在这边写的:
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
          int userkey=int.Parse( GridView1.DataKeys[GridView1.EditIndex].Values[0].ToString() );

          string userid = GridView1.Rows[GridView1.EditIndex].Cells[2].Text;

          string password = GridView1.Rows[GridView1.EditIndex].Cells[3].Text;

          string realname = GridView1.Rows[GridView1.EditIndex].Cells[4].Text;

          string email = GridView1.Rows[GridView1.EditIndex].Cells[5].Text;

          short activeflag = short.Parse( GridView1.Rows[GridView1.EditIndex].Cells[7].Text.ToString() );


          Users.UpdateUsers(userkey, userid, password, realname, email, activeflag);
  
          GridViewBind();
    } --------------------编程问答-------------------- 这个是更新事件 应该这么写:
得到主键:this.GridView1.DataKeys[(int)e.RowIndex].Value.ToString();
得到各列的值:
GridViewRow gvRow = this.GridView1.Rows[e.RowIndex];//建立GridView行对象
        TextBox nametxt = (TextBox)gvRow.Controls[1].Controls[0]; --------------------编程问答-------------------- 你没说清楚 还以为是 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)这个事件呢
要是在这个事件中的话  你要得到主键  比如主键是在第一列的话,应该这么写:
GridViewRow dvr = GridView1.Rows[e.NewEditIndex];
        string id = ((TextBox)dvr.Controls[0].Controls[0]).Text;
        Response.Write(id);

事件不一样 写的方法不一样 --------------------编程问答-------------------- 还有哪不明白吗? --------------------编程问答-------------------- 快疯啦。还是得到空值。 --------------------编程问答-------------------- 不可能 我把我做好的例子给你的
我都试过了 --------------------编程问答-------------------- 你把你事件里的代码给我沾一下 --------------------编程问答-------------------- protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
        //得到主键
        int userkey=this.GridView1.DataKeys[(int)e.RowIndex].Value.ToString();
        //得到你下面各个列的值
        GridViewRow gvRow = this.GridView1.Rows[e.RowIndex];//建立GridView行对象
        TextBox userid = (TextBox)gvRow.Controls[1].Controls[0];
        TextBox password = (TextBox)gvRow.Controls[2].Controls[0];
        TextBox realname = (TextBox)gvRow.Controls[3].Controls[0];
        TextBox email = (TextBox)gvRow.Controls[4].Controls[0];
        TextBox activeflag = (TextBox)gvRow.Controls[5].Controls[0];
....
}

你第一列应该是主键啊 第一列的索引应该是0  你照着我现在给你的例子改 绝对没错! --------------------编程问答-------------------- 错误:
指定的参数已超出有效值的范围。
参数名: index --------------------编程问答-------------------- string tm = GridView1.Rows[GridView1.EditIndex].Cells[2].Text.ToString();
--------------------编程问答-------------------- 你把错误行的代码沾过来 --------------------编程问答-------------------- 或者加个断点自己看看 声明的变量都有没有被赋上值 --------------------编程问答-------------------- 你各个列的是什么模板
你什么事件 --------------------编程问答-------------------- 获取Text的属性值 --------------------编程问答--------------------
是这一行出错:
TextBox userid = (TextBox)gvRow.Controls[1].Controls[0];
--------------------编程问答-------------------- userkey你这个字段应该是获取主键值的吧
userid又是什么东西?也是获取主键值的?(命名规则不规范)
解决方法:
你根据你绑定在GridView控件上字段的位置 来数他到底是第几列
然后
TextBox userid = (TextBox)gvRow.Controls[1].Controls[0];
        TextBox password = (TextBox)gvRow.Controls[2].Controls[0];
        TextBox realname = (TextBox)gvRow.Controls[3].Controls[0];
        TextBox email = (TextBox)gvRow.Controls[4].Controls[0];
        TextBox activeflag = (TextBox)gvRow.Controls[5].Controls[0];

在gvRow.Controls[这里是你列的索引号,索引从第一列开始算起,也就是从0开始]
你看看 前面是不是列号写错了 --------------------编程问答-------------------- 楼主,你得到空值的列是否是被隐藏的,也就是该列的Visible设为false了。如果是那么这样是取不到值的 --------------------编程问答-------------------- //得到主键
        int userkey=this.GridView1.DataKeys[(int)e.RowIndex].Value.ToString();
我觉得这个应该是你的第一列 索引应该是0  用来得到主键的 对吧?

然后下面 根据你更新的行 来出发你更新的哪一行  从而实例化了该行的行对象,也就是这句话:
GridViewRow gvRow = this.GridView1.Rows[e.RowIndex];//建立GridView行对象

触发事件的行对象已经实力化了  这样我们要取出行中的每个字段所对应数据的值,就应该像下面这样写:
        TextBox userid = (TextBox)gvRow.Controls[1].Controls[0];
        TextBox password = (TextBox)gvRow.Controls[2].Controls[0];
        TextBox realname = (TextBox)gvRow.Controls[3].Controls[0];
        TextBox email = (TextBox)gvRow.Controls[4].Controls[0];
        TextBox activeflag = (TextBox)gvRow.Controls[5].Controls[0];
因为第一列是你的主键列 列索引是0
所以下面取值的时候应该就从 索引为1的列开始取值了
然后你自己对应你绑定在GridView上绑定的字段顺序 自己数一下列号吧


我想我已经讲的很明白了。。。
可能是不是 你前面除了绑定字段列的前面还加了什么模板列?  那列号也要算上 --------------------编程问答-------------------- 楼上都是牛人 --------------------编程问答-------------------- string userid = (GridView1.Rows[GridView1.EditIndex].Cells["e.XXX(不好意思忘了,是指定行)"].Control[] as TextBox).Text --------------------编程问答-------------------- 个人签名~~
---------------------------
 惊爆支持ASP、ASP.NET2.0空间500M+SQL数据库100M 特惠价格:128一年
 支持asp 300M 虚拟主机68一年
 支持asp.net2.0 300M 虚拟主机88一年,快抢拉~~~~~  
 虚拟主机 网站空间 域名注册 主机托管 免费主机 免费空间 免费asp空间 免费虚拟主机
 免费试用~~~  

联系QQ:43909413
http://www.myidc.info/webhost/stylehost.aspx
硬件配置图:
http://www.myidc.info/images/adyj.gif --------------------编程问答-------------------- 多谢各位,问题出在我用的是模板。而不<asp:BoundField> --------------------编程问答-------------------- 顶一下。 --------------------编程问答-------------------- oye !模板要就的找控件取值了 --------------------编程问答-------------------- 弱弱的问下,如果要是取datagrid的选择列的值呢? --------------------编程问答-------------------- 那就在选择事件中写 --------------------编程问答-------------------- 帮忙顶 --------------------编程问答-------------------- 学习了..... --------------------编程问答-------------------- 一个循环就搞定了、!
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,