【问题标题】:If DataKeyNames is set to a field not defined as a primary key, then…如果 DataKeyNames 设置为未定义为主键的字段,则...
【发布时间】:2009-06-21 19:10:10
【问题描述】:


1) 我注意到,如果我将 GridView.DataKeyNames 设置为实际上未定义为数据源中的主键的字段,数据源控件(或者可能是 GridView?)会以某种方式知道DataKeyNames 中设置的字段并不是真正的主键。当我打开 Configure the Select Statement 窗口(通过 GridView 的 Smart Tasks 弹出 --> Configure Data Source --> Configure the Select Statement 窗口 --> Advanced) 和 window 都禁用了单选按钮。

a) 那么 Asp.Net 是如何“弄清楚”在 DataKeyNames 中设置的字段实际上不是主键的?


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


感谢

【问题讨论】:

    标签: c# asp.net data-binding gridview


    【解决方案1】:

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

    我猜这就是 ASP.NET 坚持 DataKeyNames 的主键的原因——任何其他列(或一组列)都无法真正检查其有效性——所以最好拒绝它们而不是遇到如果它不是唯一标识键,则会出现问题.....

    马克

    【讨论】:

    • 我还想问:A) 我假设 Asp.Net 在使用 SqlDataSource 控件时只能检查字段是否真正唯一地标识了一行?!但是在使用 ObjectDataSource 控件时,Asp.Net 是否也能以某种方式检查唯一性? B)我假设 Asp.Net “询问” Sql server 一个字段是否真的是主键?
    • 在使用 SQL 数据源或 ADO.NET 数据集时,ASP.NET 绝对可以检查主键。不过,不确定 ObjectDataSource。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多