必须在 GridView“GridView1”上指定数据键,然后才能检索选定的数据键。使用 DataKeyNames 属性指定数据键。
说明:
执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息:
System.InvalidOperationException: 必须在 GridView“GridView1”上指定数据键,然后才能检索选定的数据键。使用 DataKeyNames 属性指定数据键。
今天用gridview连接了一个数据源,结果出现如上错误
原来是自己数据库知识忘记差不多了,在数据库中关于主键是这样解释的:
主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。 主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。
1)保证实体的完整性;
2)加快数据库的操作速度
3) 在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
1) 一个表中只能有一个主键。如果在其他字段上建立主键,则原来的主键就会取消。在ACCESS中,虽然主键不是必需的,但最好为每个表都设置一个主键。
2)主键的值不可重复,也不可为空(NULL)。
上面说明的是access,不过在VS中连接的数据库没有设置主键就没有办法正常运行
protected void
GridView
1_SelectedIndexChanged(object sender, EventArgs e) { lblId.Text =
GridView
1.SelectedDataKey.Value.ToStr
很多时候我们需要在
GridView
的RowCommand之类的事件中需要获取当前行的一些关联性的数据值。但这些数据值又没有直接体现在
GridView
的列中。这个时候该怎么办呢?
有同学喜欢用隐藏列的方式,把需要使用但不显示的字段绑定到此列上,同时
设置
列宽为0或不显示,使用时可以用常规的取某行某列的方式来获取数据。
但是在Framework 2.0中,我们可以采用DataKeyNames的方式来...
我在用
GridView
绑定数据之后,实现删除功能时,发现总出现“索引值超出范围,必须为非负值并小于集合大小”,经查询发现需要为
GridView
绑定一个
主键
,在
GridView
属性中加入DataKeyNames="
主键
字段名"。