GridView.DataKeyNames Propriedade

Definição

Obtém ou define uma matriz que contém os nomes dos campos de chave primária para os itens exibidos em um controle 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()

Valor da propriedade

String[]

Uma matriz que contém os nomes dos campos de chave primária para os itens exibidos em um controle GridView.

Atributos

Exemplos

O exemplo a seguir demonstra como usar a DataKeyNames propriedade para especificar o campo de chave da fonte de dados. No exemplo, o DataKeyNames atributo do GridView elemento na marcação especifica dois campos de chave usando uma vírgula para separar os nomes. Para executar este exemplo, crie um site que tenha o seguinte:

  • Uma conexão com o banco de dados de exemplo AdventureWorksLT e uma cadeia de conexão chamada AdventureWorksLTConnectionString. Para obter informações sobre como configurar o banco de dados de exemplo AdventureWorksLT, consulte Como configurar um banco de dados de exemplo AdventureWorksLT para desenvolvimento de ASP.NET.

  • Uma classe de contexto de dados LINQ-to-SQL chamada AdventureWorksLTDataClassesDataContext. O contexto de dados deve ter uma classe para a tabela SalesOrderDetails. Para obter informações sobre como criar classes LINQ-to-SQL, consulte 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>

Comentários

Use a DataKeyNames propriedade para especificar o campo ou os campos que representam a chave primária da fonte de dados. Você só deve definir essa propriedade para o campo ou campos necessários para identificar exclusivamente cada linha; por exemplo, a coluna ID se um valor inteiro identificar exclusivamente cada linha. Você deve definir a DataKeyNames propriedade para que os recursos de atualização automática e exclusão do GridView controle funcionem. Os valores desses campos de chave são passados para o controle da fonte de dados para especificar a linha a ser atualizada ou excluída.

Se você precisar recuperar o valor da chave de dados ao atualizar ou excluir uma linha, use a Keys propriedade da GridViewUpdateEventArgs classe ou GridViewDeleteEventArgs . Por exemplo, e.Keys[0] contém o valor da primeira chave de dados em um RowUpdating manipulador de eventos ou RowDeleting .

Se você precisar recuperar o valor da chave de dados quando uma linha for selecionada, use a SelectedDataKey propriedade .

Quando a DataKeyNames propriedade é definida, o GridView controle preenche automaticamente sua DataKeys coleção com os valores do campo ou campos especificados, o que fornece uma maneira conveniente de acessar as chaves primárias de cada linha.

Observação

O GridView controle armazena esses valores de campo de chave no estado de controle. Se esses valores contiverem informações confidenciais, é altamente recomendável habilitar a criptografia de estado de exibição definindo a ViewStateEncryptionMode propriedade como ViewStateEncryptionMode.Always.

Quando você usa colunas de campo geradas automaticamente (definindo a AutoGenerateColumns propriedade como true), o GridView controle garante que as colunas que correspondem ao campo ou campos especificados na DataKeyNames propriedade sejam somente leitura.

Se a Visible propriedade de um campo de coluna estiver definida como false, a coluna não será exibida no GridView controle e os dados da coluna não fizerem uma viagem de ida e volta para o cliente. Se você quiser que os dados de uma coluna que não esteja visível estejam disponíveis para o cliente, adicione o nome do campo à DataKeyNames propriedade .

Aplica-se a

Confira também