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