Trabalhando com GridView e DataKeyNames com Várias Chaves
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://www.ecode10.com/artigo/812/trabalhando-com-GridView-e-RowCommand)
- Trabalhando com GridView, RowCommand e DataKeysNames (http://www.ecode10.com/artigo/813/Trabalhando-com-GridView-RowCommand-e-DataKeysNames)
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
onrowcommand="gridProdutoAgencia_RowCommand">
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
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.