Trabalhando com GridView e DataKeyNames com Várias Chaves


por Mauricio Junior em 1/1/2011 0

        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
voltar   comente  subir

 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:

Comente (dê sua opinião):
Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

NDOC para versão framework 2.0
Trabalhando com STORED PROCEDURE
Gerando Relatório e Exportando para o Excel
Vírus do Serasa por E-mail
Microsoft HomeOS
Sair da tela clicando ESC no Windows Forms
Trabalhando com GridView e BoundField escondido
ListBox componente básico
Vídeo: Montando o Windows Phone em NYC
Tecla ESC - Windows Forms
Alongar é preciso
Samsung em NYC
Vídeo aula explicando o que é o FreeTextBox e como utilizar em seu projetos ASP.NET.
Windows Phone 7 com Microsoft TellMe
Vídeo HTC
Criando XML a partir do DataSet Tipado com Visual Studio.NET 2005 – Parte I
Novo SO Palm, depois da venda...
Trabalhando com Cookie usando Visual Studio.NET 2005 (parte I)
Trabalhando com Ipersonate e Web
Sistema de Login em ASP – Parte VI
Filtrar o DataTable Dinamicamente
Sistema de Login em ASP – Parte X
Vídeo: Série Atlas.NET - Parte III
ModalDialogExtender
User Control Windows executando no Internet Explorer (parte 2 de 2)
Join DataTable
Exemplos de Queries Linq
Microsoft touch mouse
Usando Themes ASP.NET 2.0 (Parte 2)
Formatando String de Vários Tipos
Vídeo - Google Earth Live em tempo real
Padrões de nomenclaturas
Criando Números Aleatoriamente
Themas - Muito Simples
ASPNETi.COM chega aos 43 mil pageviews