C# 如果DataKeyNames设置为未定义为主键的字段,则…;

C# 如果DataKeyNames设置为未定义为主键的字段,则…;,c#,asp.net,data-binding,gridview,C#,Asp.net,Data Binding,Gridview,1) 我注意到,如果我将GridView.DataKeyNames设置为一个实际上没有定义为数据源中主键的字段,那么数据源控制(或者GridView?)将不知何故知道DataKeyNames中设置的字段实际上不是主键。当我打开“配置选择语句”窗口(通过GridView的智能任务弹出窗口-->配置数据源-->配置选择语句窗口-->高级)并且窗口禁用了这两个单选按钮时,我意识到了这一事实 a) 那么Asp.Net是如何“发现”DataKeyNames中设置的字段实际上不是主键的呢 b) 此外,程序


1) 我注意到,如果我将GridView.DataKeyNames设置为一个实际上没有定义为数据源中主键的字段,那么数据源控制(或者GridView?)将不知何故知道DataKeyNames中设置的字段实际上不是主键。当我打开“配置选择语句”窗口(通过GridView的智能任务弹出窗口-->配置数据源-->配置选择语句窗口-->高级)并且窗口禁用了这两个单选按钮时,我意识到了这一事实

a) 那么Asp.Net是如何“发现”DataKeyNames中设置的字段实际上不是主键的呢


b) 此外,程序员是否应该将DataKeyName设置为她选择的任何字段,即使该字段未定义为数据源中的主键



thanx

好的,DataKeyNames属性的目的是唯一地标识数据集中的每个数据行。为此,ASP.NET需要100%确保它确实是您提供的唯一标识列(或列集),并且唯一可以真正检查的是表的主键-这将始终是唯一标识行(这正是主键的定义)

我想这就是ASP.NET坚持使用DataKeyName的主键的原因——任何其他列(或列集)都无法真正检查其有效性——因此,如果不是唯一标识键,最好拒绝它们,而不是遇到问题


Marc

我还可以问:A)我假设Asp.Net在使用SqlDataSource控件时只能检查字段是否真正唯一地标识一行?!但是,Asp.Net在使用ObjectDataSource控件时是否也能以某种方式检查唯一性?B) 我假设Asp.Net“询问”Sql server某个字段是否真的是主键?在使用Sql数据源或ADO.Net数据集时,Asp.Net肯定可以检查主键。但是,不确定ObjectDataSource。