日期:2014-05-17  浏览次数:20402 次

DataKeyNames问题求解
我们知道在DataKeyNames中保存的是一些字段的新旧值,这些值用于提供给SQL的Update和Delete语句中的WHERE条件作为参数的值。那么我们在选择删除GridView等控件中的某条记录时,这些Command语句是如何在DataKeyNames中寻找到匹配的值的呢?即DataKeyNames是如何为参数提供值的?还有就是,我们将数据从数据库中读取出来,已经保存在了DataSet中了,这些值我们都可以轻易的从DataSet中查询到,那么为什么还要设置DataKeyNames这个工具来提供参数的值呢?它的作用主要是什么?它的实现的原理是怎么样的?请高手解答!

------解决方案--------------------
这些Command语句是如何在DataKeyNames中寻找到匹配的值的呢?
这是GRIDVEIW的内部处理方式了,好像是通过反射来得到的值. 不知道有什么记错.

DataKeyNames 是绑定到gird的主键值。在update,delete的时候都需要主键条件吧?性能

建议去看看MSDN或者asp.net2.0揭密。
------解决方案--------------------
应该是反射 具体去msdn
------解决方案--------------------
DataKeyNames 做为DataGridView控件的一个属性
 
你拖一个DataGridView控件 DataGridView1 就相当于实例化了一个DataGridView对象

然后给DataGridView1对象设置DataKeyNames 属性

至于是如何操作的原理很简单 获取DataGridView1的DataKeyNames属性的值 做为条件传入
Delete Update 等方法之中就可以了
至于代码 就要找微软看看了


在DataSet中可以取到,但是你觉得DataSet中能够获取你点击的删除的当前行的ID吗? 不麻烦吗?



------解决方案--------------------
实现原理这个还是看看MSDN比较好。。
而对于你说的可以从dataset中查到,是没错,你可以这样实现。但是,明显麻烦得多啦。。所以出现了datakey这样的东西,更加的方便程序员。这样也才有那么多个.net版本啦。。一个一个的功能加强。。。方便我们嘛
------解决方案--------------------
我想不出怎么会想到反射的,似乎没有任何可能性。

msdn并不是一个可以深入学习的地方。msdn只是提供使用微软开发工具的参考手册,是最浅显的知识。当你学习那些东西的内部机制,msdn就根本不足作为参考了。从实践的角度,有三种方式:1是读.net framework源代码;2是自己写各种测试程序;3是开发一些商品化组件(控件)参与到专业的开发工作中,而不仅仅是自己用别人的组件做点拼凑的工作。
------解决方案--------------------
通过dataset 绑定gridview中,相关数据库会保存在viewstate中
当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性
GridView的DataKeyNames属性设置表字段名的主要目的为了在为GridView控件绑定数据时获取当前行指定字段的值,以便作相应处理。