Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

KeyField no GridView

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.

posted on Thursday, May 19, 2005 9:07 PM

Feedback

# re: KeyField no GridView 7/21/2005 3:18 PM Rodrigo

Olá mais uma vez Israel,

Bem, estava eu implementando um GridView e armazenando os dados de uma consulta em uma variável de sessão, que recebia um dataset da consulta. O procedimento foi feito para que na paginação dos dados do GridView não precisasse ir até o banco.
Muito bem. Eu usei o campo chave, mas depois da primeira paginação a chave não é mantida, mesmo tratando no evento de paginação.

dgwClientes.DataKeyNames(0) = "cliId"
dgwClientes.PageIndex = e.NewPageIndex
dgwClientes.DataSource = Session("dsClientes")
dgwClientes.DataBind()

E a pergunta que faço é porque a chave não se mantém mesmo com a propriedade, para manter o estado dos dados, habilidada em cada paginação?

[]'s
Rodrigo

# re: KeyField no GridView 7/22/2005 1:54 AM Israel Aece

Ola Rodrigo,

Bem, não entendi muito bem sua duvida. Se voce chama o Bind novamente do seu GridView, teoricamente é para o conteudo ser atualizado, inclusive as suas Keys.

De certeza que não está fazendo nada errado? Lembre-se que guardar Dataset em variaveis de sessão não é uma boa alternativa.

Abs,

# GridView 8/18/2005 4:30 PM Daniel

Meu gridview é preenchido por uma stored procedure. O código foi feito na mao, gostaria de que uma das colunas fosse preenchida como link. COmo faço para minha coluna virar um link??

Dim source As DataView = dsTabela.Tables("tabela").DefaultView

source.Table.Columns(0).ColumnName = "Coluna 1"

meuGridView.DataSource = source
meuGridView.DataBind()



# re: KeyField no GridView 8/18/2005 5:50 PM Israel Aece

Ola Daniel,

Este artigo poderá te ajudar nisso: http://www.linhadecodigo.com.br/artigos.asp?id_ac=788&pag=1

Espero ter ajudado,

Title  
Name  
Url
Box Code
Protected by FormShield
Comments