GridView.DataKeyNames 属性

定义

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

public:
 virtual property cli::array <System::String ^> ^ DataKeyNames { cli::array <System::String ^> ^ get(); void set(cli::array <System::String ^> ^ value); };
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.StringArrayConverter))]
public virtual string[] DataKeyNames { get; set; }
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.StringArrayConverter))>]
member this.DataKeyNames : string[] with get, set
Public Overridable Property DataKeyNames As String()

属性值

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>
<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 属性。

适用于

另请参阅