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



                                AutoGenerateColumns="false" DataKeyNames="prdCodigo, banCod, ageCod"
                                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