Na versão 1.x do .NET Framework/ASP.NET, temos no DataGrid, a propriedade DataKeyField. Esta é utilizada para definirmos um campo da nossa fonte de dados (DataSource) que identificará como único aquele item/registro. Na maior parte das vezes é representado pelo campo Primary Key da Tabela.
Bastava definir uma coluna (uma única coluna/campo) na propriedade DataKeyField, e já conseguimos resgatar o índice deste item da seguinte forma:
Dim userID As Integer = Convert.ToInt32(Me.dgUsers.DataKeys(N))
Response.Write(userID)
Onde N é um número inteiro que representa a linha qual voce deseja recuperar o Key Field.
Agora no ASP.NET 2.0, no controle GridView, temos ainda essa propriedade, mas com um nome um pouco diferente: DataKeyNames. Como podemos reparar, ela não permite só um campo, mas sim, um array de strings, contendo o nome das colunas/campos que desejar definir para poder identificar o registro. Os campos são separados por vírgula (“,”), exemplo:
<asp:GridView …. DataKeyNames=”ID, AnotherID”></asp:GridView>
E para recuperar, resgatamos uma coleção de “chave-valor” que nos é retornado através da propriedade Values do DataKey:
Dim keys As DataKey = Me.GridView1.DataKeys(N)
For Each d As DictionaryEntry In keys.Values
Response.Write(d.Key.ToString() & “: ” & d.Value.ToString() & “<BR>”)
Next
Onde N é um número inteiro que representa a linha qual voce deseja recuperar o DataKey.
Apesar desta funcionalidade, eu particularmente nunca precisei ter mais de um campo para identificar a linha do meu controle.