GridView.DataKeyNames Propriedade

Definição

Obtém ou define um array que contém os nomes dos campos de chave primária para os itens apresentados num GridView controlo.

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 de Propriedade

String[]

Um array que contém os nomes dos campos de chave primária dos itens apresentados num GridView controlo.

Atributos

Exemplos

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

  • Uma ligação à base de dados de exemplos AdventureWorksLT e um cadeia de ligação chamado AdventureWorksLTConnectionString. Para informações sobre como configurar a base de dados de exemplo AdventureWorksLT, consulte Como: Configurar uma Base de Dados de Exemplo AdventureWorksLT para Desenvolvimento ASP.NET.

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

Observações

Use a DataKeyNames propriedade para especificar o campo ou campos que representam a chave primária da fonte de dados. Deve definir esta propriedade apenas para o campo ou campos necessários para identificar unicamente cada linha; por exemplo, a coluna ID se um valor inteiro identifica unicamente cada linha. Deve definir a DataKeyNames propriedade para que as funcionalidades automáticas de atualização e eliminação do GridView controlo funcionem. Os valores destes campos-chave são passados para o controlo de fonte de dados para especificar a linha a atualizar ou eliminar.

Se precisares de recuperar o valor da chave de dados ao atualizar ou eliminar uma linha, usa a Keys propriedade da GridViewUpdateEventArgs classe ou GridViewDeleteEventArgs . Por exemplo, e.Keys[0] detém o valor da primeira chave de dados num RowUpdating handler de eventos de OR RowDeleting .

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

Quando a DataKeyNames propriedade é definida, o controlo GridView preenche automaticamente a sua DataKeys coleção com os valores do campo ou campos especificados, o que proporciona uma forma conveniente de aceder às chaves primárias de cada linha.

Note

O GridView controlo armazena estes valores-chave do campo no estado de controlo. Se estes valores conterem informação sensível, é fortemente recomendado que ative a encriptação do estado de visualização definindo a ViewStateEncryptionMode propriedade para ViewStateEncryptionMode.Always.

Quando usa colunas de campo geradas automaticamente (definindo a AutoGenerateColumns propriedade para true), o GridView controlo garante que as colunas que correspondem ao campo ou campos especificados na DataKeyNames propriedade são apenas de leitura.

Se a Visible propriedade de um campo de coluna estiver definida para false, a coluna não é exibida no GridView controlo e os dados da coluna não fazem uma viagem de ida e volta ao cliente. Se quiser que os dados de uma coluna que não é visível estejam disponíveis para o cliente, adicione o nome do campo à DataKeyNames propriedade.

Aplica-se a

Ver também