Olá, pessoal, hoje vamos falar um pouco sobre o preenchimento de um GridView utilizando DataKeyNames com
várias chaves.
Requisitos:
- Visual Studio .NET 2008
- Framework 3.5
- Linguagem C#
Você pode estar se perguntado o que eu quero com várias chaves. Isso é a possibilidade da tabela de banco de dados ter mais de
uma chave necessária para fazer update e delete. Já publiquei outros dois artigos similares a este, mas existem diferenças.
Leia os artigos anteriores:
Nos textos anteriores, utilizei apenas um DataKeyNames dentro do GridView.
Hoje vou colocar mais de uma chave para poder pegar depois e atualizar
a tabela de banco de dados. Veja o cadastro na figura abaixo:

O
código é simples:
<asp:GridView ID="gridProdutoAgencia" runat="server"<br /> AutoGenerateColumns="false" DataKeyNames="prdCodigo, banCod, ageCod"<br /> onrowcommand="gridProdutoAgencia_RowCommand"><br /> <Columns><br /> <asp:BoundField DataField="prdCodigo" HeaderText="Cód." /><br /> <asp:BoundField DataField="banCod" HeaderText="Cod. Banco" /><br /> <asp:BoundField DataField="ageCod" HeaderText="Cód. Agência" /><br /> <asp:BoundField DataField="pabTempoExpurgo" HeaderText="Tempo" /><br /> <asp:BoundField DataField="pabSituacao" HeaderText="Situação" /><br /> <asp:BoundField DataField="pabIndValidaCod2d" HeaderText="Valida Código 2D" /><br /> <asp:BoundField DataField="pabIndValidaImagem" HeaderText="Valida Imagem" /><br /> <asp:ButtonField ButtonType="Link" CommandName="Ativar" HeaderText="Ativar" Text="Ativar" /><br /> <asp:ButtonField ButtonType="Link" CommandName="Inativar" HeaderText="Inativar" Text="Inativar" /><br /> <asp:ButtonField ButtonType="Link" CommandName="Delete" HeaderText="Delete" Text="Delete" /><br /> </Columns><br /> </asp:GridView> Observe, na
linha 3 do código acima, que coloquei a chave separada por
vírgula, ou melhor, mais de uma chave do banco.
DataKeyNames="prdCodigo, banCod, ageCod"É bastante simples e direta a forma de pegar essas chaves, a Microsoft facilitou
muito a nossa vida com essa funcionalidade. Dentro do RowCommand também é bem simples
de pegar os valores colocados. Veja:
protected void gridProdutoAgencia_RowCommand(object sender, GridViewCommandEventArgs e)<br /> {<br /> try<br /> {<br /> if (e.CommandName == "Delete")<br /> {<br /> int index = int.Parse((string)e.CommandArgument);<br /> ProdutoAgenciaBancoClienteDTO dto = new ProdutoAgenciaBancoClienteDTO();<br /> dto.BanCod = gridProdutoAgencia.DataKeys[index]["banCod"].ToString();<br /> dto.AgeCod = gridProdutoAgencia.DataKeys[index]["ageCod"].ToString();<br /> dto.PrdCodigo = gridProdutoAgencia.DataKeys[index]["prdCodigo"].ToString();<br /><br /> if (_produtoAgenciaBancoClienteBRL.deleteProdutoAgenciaBancoCliente(dto))<br /> {<br /> Response.Redirect("CadastroProdutoAgenciaCliente.aspx");<br /> }<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> lblErro.Text = ex.Message.ToString();<br /> }<br /> } O
código que está em anexo atribui as chaves para dentro de uma dto instanciada:
int index = int.Parse((string)e.CommandArgument);<br /><br />gridProdutoAgencia.DataKeys[index]["banCod"].ToString();<br />gridProdutoAgencia.DataKeys[index]["ageCod"].ToString();<br />gridProdutoAgencia.DataKeys[index]["prdCodigo"].ToString();O
primeiro passo é pegar o index com o e.CommandArgument e depois usar a variável
com o DataKeys. Com isso, você pode atribuir qualquer outra variável para
atualização, deleção ou outra coisa.
Fico por aqui, espero que a explicação tenha sido tranquila. Qualquer dúvida, pode entrar em contato
pelo site.








