GridView.DataKeyNames プロパティ

定義

GridView コントロールに表示される項目の主キー フィールドの名前が格納された配列を取得または設定します。Gets or sets an array that contains the names of the primary key fields for the items displayed in a GridView control.

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 コントロールに表示される項目の主キー フィールドの名前が格納された配列。An array that contains the names of the primary key fields for the items displayed in a GridView control.

属性

次の例は、プロパティを使用して、 DataKeyNames データソースのキーフィールドを指定する方法を示しています。The following example demonstrates how to use the DataKeyNames property to specify the key field of the data source. この例では、 DataKeyNames マークアップ内の要素の属性が、 GridView 名前を区切るためにコンマを使用して2つのキーフィールドを指定しています。In the example, the DataKeyNames attribute of the GridView element in markup specifies two key fields by using a comma to separate the names. この例を実行するには、次のものを持つ Web サイトを作成します。To run this example, create a Web site that has the following:

  • AdventureWorksLT サンプルデータベースへの接続と、という名前の接続文字列 AdventureWorksLTConnectionStringA connection to the AdventureWorksLT sample database and a connection string that is named AdventureWorksLTConnectionString. AdventureWorksLT サンプルデータベースを設定する方法の詳細については、「 方法: ASP.NET 開発用の AdventureWorksLT サンプルデータベースを設定する」を参照してください。For information about how to set up the AdventureWorksLT sample database, see How to: Set Up an AdventureWorksLT Sample Database for ASP.NET Development.

  • という名前の LINQ to SQL データコンテキストクラス AdventureWorksLTDataClassesDataContextA LINQ-to-SQL data context class that is named AdventureWorksLTDataClassesDataContext. データコンテキストには、SalesOrderDetails テーブルのクラスが必要です。The data context must have a class for the SalesOrderDetails table. LINQ to SQL クラスを作成する方法の詳細については、「 LINQ to SQL」を参照してください。For information about how to create LINQ-to-SQL classes, see 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 データソースの主キーを表すフィールドを指定します。Use the DataKeyNames property to specify the field or fields that represent the primary key of the data source. このプロパティは、各行を一意に識別するために必要なフィールドだけに設定する必要があります。たとえば、整数値が各行を一意に識別する場合は、ID 列です。You should only set this property to the field or fields that are required to uniquely identify each row; for example, the ID column if an integer value uniquely identifies each row. DataKeyNamesコントロールの自動更新機能および削除機能を機能させるには、プロパティを設定する必要があり GridView ます。You must set the DataKeyNames property in order for the automatic update and delete features of the GridView control to work. 更新または削除する行を指定するために、これらのキーフィールドの値がデータソースコントロールに渡されます。The values of these key fields are passed to the data source control in order to specify the row to update or delete.

行を更新または削除するときにデータキー値を取得する必要がある場合 Keys GridViewUpdateEventArgs は、クラスまたはクラスのプロパティを使用し GridViewDeleteEventArgs ます。If you need to retrieve the data key value when updating or deleting a row, use the Keys property of either the GridViewUpdateEventArgs or GridViewDeleteEventArgs class. たとえば、 e.Keys[0] は、またはイベントハンドラーの最初のデータキーの値を保持 RowUpdating RowDeleting します。For example, e.Keys[0] holds the value of the first data key in a RowUpdating or RowDeleting event handler.

行を選択したときにデータキー値を取得する必要がある場合は、プロパティを使用し SelectedDataKey ます。If you need to retrieve the data key value when a row is selected, use the SelectedDataKey property.

DataKeyNamesプロパティが設定されると、 GridView コントロールは、指定されたフィールドの値を使用してコレクションを自動的に作成します DataKeys 。これにより、各行の主キーにアクセスする便利な方法が提供されます。When the DataKeyNames property is set, the GridView control automatically populates its DataKeys collection with the values from the specified field or fields, which provides a convenient way to access the primary keys of each row.

注意

コントロールは、 GridView これらのキーフィールドの値をコントロールの状態に格納します。The GridView control stores these key field values in the control state. これらの値に機密情報が含まれている場合は、プロパティをに設定して、ビューステートの暗号化を有効にすることを強くお勧めし ViewStateEncryptionMode ViewStateEncryptionMode.Always ます。If these values contain sensitive information, it is strongly recommended that you enable view-state encryption by setting the ViewStateEncryptionMode property to ViewStateEncryptionMode.Always.

自動的に生成されたフィールド列を使用する場合 (プロパティをに設定することによって AutoGenerateColumns true )、コントロールは、 GridView プロパティで指定されたフィールドに対応する列が読み取り専用であることを確認し DataKeyNames ます。When you use automatically generated field columns (by setting the AutoGenerateColumns property to true), the GridView control makes sure that the columns that correspond to the field or fields specified in the DataKeyNames property are read-only.

Visible列フィールドのプロパティがに設定されている場合、その列はコントロールに表示されず、 false GridView 列のデータがクライアントに対してラウンドトリップすることはありません。If the Visible property of a column field is set to false, the column is not displayed in the GridView control and the data for the column does not make a round trip to the client. 表示されていない列のデータをクライアントで使用できるようにするには、プロパティにフィールド名を追加し DataKeyNames ます。If you want the data for a column that is not visible to be available to the client, add the field name to the DataKeyNames property.

適用対象

こちらもご覧ください