使用英语阅读

通过


GridView.DataKeyNames 属性

定义

获取或设置一个数组,该数组包含了显示在 GridView 控件中的项的主键字段的名称。

[System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.StringArrayConverter))]
public virtual string[] DataKeyNames { get; set; }

属性值

String[]

一个数组,其中包含了显示在 GridView 控件中的项的主键字段的名称。

属性

示例

以下示例演示如何使用 DataKeyNames 属性指定数据源的键字段。 在此示例中, DataKeyNames 标记中 元素的 GridView 属性使用逗号分隔名称来指定两个键字段。 若要运行此示例,请创建具有以下项的网站:

  • 与 AdventureWorksLT 示例数据库的连接,以及名为 的 AdventureWorksLTConnectionString连接字符串。 有关如何设置 AdventureWorksLT 示例数据库的信息,请参阅 如何:为 ASP.NET 开发设置 AdventureWorksLT 示例数据库

  • 名为 AdventureWorksLTDataClassesDataContext的 LINQ to-SQL 数据上下文类。 数据上下文必须具有 SalesOrderDetails 表的类。 有关如何创建 LINQ-to-SQL 类的信息,请参阅 LINQ to SQL

<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="AdventureWorksLTDataClassesDataContext"
    EnableDelete="True" EnableInsert="True" EnableUpdate="True" 
    TableName="SalesOrderDetails">
</asp:LinqDataSource>

<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 
    DataKeyNames="SalesOrderID,SalesOrderDetailID"
    DataSourceID="LinqDataSource1">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" 
            ShowEditButton="True" />
        <asp:BoundField DataField="SalesOrderID" 
            HeaderText="SalesOrderID" ReadOnly="True"
            SortExpression="SalesOrderID" />
        <asp:BoundField DataField="SalesOrderDetailID" 
            HeaderText="SalesOrderDetailID" InsertVisible="False"
            ReadOnly="True" SortExpression="SalesOrderDetailID" />
        <asp:BoundField DataField="OrderQty" 
            HeaderText="OrderQty" SortExpression="OrderQty" />
        <asp:BoundField DataField="ProductID" 
            HeaderText="ProductID" SortExpression="ProductID" />
        <asp:BoundField DataField="UnitPrice" 
            HeaderText="UnitPrice" SortExpression="UnitPrice" />
        <asp:BoundField DataField="ModifiedDate" 
            HeaderText="ModifiedDate" SortExpression="ModifiedDate" />
    </Columns>
</asp:GridView>

注解

DataKeyNames使用 属性指定一个或多个表示数据源主键的字段。 应仅将此属性设置为唯一标识每行所需的字段;例如,如果整数值唯一标识每一行,则为 ID 列。 必须设置 DataKeyNames 属性,控件的自动更新和删除功能 GridView 才能正常工作。 这些键字段的值将传递给数据源控件,以便指定要更新或删除的行。

如果在更新或删除行时需要检索数据键值,请使用 KeysGridViewDeleteEventArgs 类的 GridViewUpdateEventArgs 属性。 例如, e.Keys[0] 保留 或 RowDeleting 事件处理程序中第一个RowUpdating数据键的值。

如果需要在选择行时检索数据键值,请使用 SelectedDataKey 属性。

DataKeyNames设置 属性后,GridView控件会自动使用指定字段或字段中的值填充其DataKeys集合,这提供了一种访问每行主键的便捷方法。

备注

控件 GridView 将这些键字段值存储在控件状态中。 如果这些值包含敏感信息,强烈建议通过将 属性设置为 ViewStateEncryptionModeViewStateEncryptionMode.Always来启用视图状态加密。

通过将 属性设置为 AutoGenerateColumnstrue) 使用自动生成的字段列 (时, GridView 控件可确保与属性中指定的 DataKeyNames 字段相对应的列是只读的。

Visible如果列字段的 属性设置为 false,则列不会显示在 控件中GridView,并且列的数据不会往返于客户端。 如果希望客户端可以使用不可见的列的数据,请将字段名称添加到 DataKeyNames 属性。

适用于

产品 版本
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

另请参阅