Olá Internautas, hoje gostaria de 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#
O que quer dizer esse: com várias chaves? Quero dizer e falar da possibilidade da tabela de banco de dados ter mais de uma chave necessária para fazer update e delete. Existe apenas uma diferença entre os artigos publicados anteriormente com este. Segue abaixo os artigos anteriores.
-
Trabalhando com GridView e RowCommand (
http://aspneti.com/trabalhando+com+GridView+e+RowCommand+812,0.aspx)
-
Trabalhando com GridView, RowCommand e DataKeysNames (
http://aspneti.com/Trabalhando+com+GridView+RowCommand+e+DataKeysNames+813,0.aspx)
Nestes artigos publicados acima, utilizei apenas um DataKeyNames dentro do GridView. Neste artigo, vou colocar mais de uma chave para poder pegar depois e atualizar a tabela de banco de dados. É um cadastro simples (figura 1.1)
O código é simples: Referência 1.2
<asp:GridView ID="gridProdutoAgencia" runat="server"
AutoGenerateColumns="false" DataKeyNames="prdCodigo, banCod, ageCod"
onrowcommand="gridProdutoAgencia_RowCommand">
<Columns>
<asp:BoundField DataField="prdCodigo" HeaderText="Cód." />
<asp:BoundField DataField="banCod" HeaderText="Cod. Banco" />
<asp:BoundField DataField="ageCod" HeaderText="Cód. Agência" />
<asp:BoundField DataField="pabTempoExpurgo" HeaderText="Tempo" />
<asp:BoundField DataField="pabSituacao" HeaderText="Situação" />
<asp:BoundField DataField="pabIndValidaCod2d" HeaderText="Valida Código 2D" />
<asp:BoundField DataField="pabIndValidaImagem" HeaderText="Valida Imagem" />
<asp:ButtonField ButtonType="Link" CommandName="Ativar" HeaderText="Ativar" Text="Ativar" />
<asp:ButtonField ButtonType="Link" CommandName="Inativar" HeaderText="Inativar" Text="Inativar" />
<asp:ButtonField ButtonType="Link" CommandName="Delete" HeaderText="Delete" Text="Delete" />
</Columns>
</asp:GridView>
Referência: 1.2
Na linha 3 do código de referência 1.2 mostra que coloquei a chave separada por vírgula, ou melhor, mais de uma chave do banco.
DataKeyNames="prdCodigo, banCod, ageCod"
Referência: 1.3
Para pegar estas chaves, funciona de forma simples e direta. A Microsoft facilitou muito a nossa vida com essa funcionalidade. Dentro do RowCommand é simples pegar os valores colocados. Em outros eventos estes valores podem ser pegos facilmente, mas com este artigo, mostro com o RowCommand. Veja como pegar. (Referência 1.4)
protected void gridProdutoAgencia_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
if (e.CommandName == "Delete")
{
int index = int.Parse((string)e.CommandArgument);
ProdutoAgenciaBancoClienteDTO dto = new ProdutoAgenciaBancoClienteDTO();
dto.BanCod = gridProdutoAgencia.DataKeys[index]["banCod"].ToString();
dto.AgeCod = gridProdutoAgencia.DataKeys[index]["ageCod"].ToString();
dto.PrdCodigo = gridProdutoAgencia.DataKeys[index]["prdCodigo"].ToString();
if (_produtoAgenciaBancoClienteBRL.deleteProdutoAgenciaBancoCliente(dto))
{
Response.Redirect("CadastroProdutoAgenciaCliente.aspx");
}
}
}
catch (Exception ex)
{
lblErro.Text = ex.Message.ToString();
}
}
Referência: 1.4
O código que está em anexo atribui as chaves para dentro de uma dto instanciada. (Referência 1.5)
int index = int.Parse((string)e.CommandArgument);
gridProdutoAgencia.DataKeys[index]["banCod"].ToString();
gridProdutoAgencia.DataKeys[index]["ageCod"].ToString();
gridProdutoAgencia.DataKeys[index]["prdCodigo"].ToString();
Referência: 1.5
O primeiro passo é pegar o index com o e.CommandArgument e depois usar a variável com o DataKeys. Com isso você pode atribuir para qualquer outra variável para atualização, deleção ou outra coisa.
Bom, eu fico por aqui e espero que você tenha entendido a singela explicação.
Qualquer dúvida, pode entrar em contato pelo site.
Mauricio Junior – www.mauriciojunior.org / blog.mauriciojunior.org