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"
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>
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)
{
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();
}
}
O
código que está em anexo atribui as chaves para dentro de uma dto instanciada:
int index = int.Parse((string)e.CommandArgument);
gridProdutoAgencia.DataKeys[index]["banCod"].ToString();
gridProdutoAgencia.DataKeys[index]["ageCod"].ToString();
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.