Dev (Back & Front)ARTIGO

Trabalhando com GridView e DataKeyNames utilizando várias chaves

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"<br />                                AutoGenerateColumns="false" DataKeyNames="prdCodigo, banCod, ageCod"<br />                                onrowcommand="gridProdutoAgencia_RowCommand"><br />                            <Columns><br />                                <asp:BoundField DataField="prdCodigo" HeaderText="Cód." /><br />                                <asp:BoundField DataField="banCod" HeaderText="Cod. Banco" /><br />                                <asp:BoundField DataField="ageCod" HeaderText="Cód. Agência" /><br />                                <asp:BoundField DataField="pabTempoExpurgo" HeaderText="Tempo" /><br />                                <asp:BoundField DataField="pabSituacao" HeaderText="Situação" /><br />                                <asp:BoundField DataField="pabIndValidaCod2d" HeaderText="Valida Código 2D" /><br />                                <asp:BoundField DataField="pabIndValidaImagem" HeaderText="Valida Imagem" /><br />                                <asp:ButtonField ButtonType="Link" CommandName="Ativar" HeaderText="Ativar" Text="Ativar" /><br />                                <asp:ButtonField ButtonType="Link" CommandName="Inativar" HeaderText="Inativar" Text="Inativar" /><br />                                <asp:ButtonField ButtonType="Link" CommandName="Delete" HeaderText="Delete" Text="Delete" /><br />                            </Columns><br />                        </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)<br />        {<br />            try<br />            {<br />                if (e.CommandName == "Delete")<br />                {<br />                    int index = int.Parse((string)e.CommandArgument);<br />                    ProdutoAgenciaBancoClienteDTO dto = new ProdutoAgenciaBancoClienteDTO();<br />                    dto.BanCod = gridProdutoAgencia.DataKeys[index]["banCod"].ToString();<br />                    dto.AgeCod = gridProdutoAgencia.DataKeys[index]["ageCod"].ToString();<br />                    dto.PrdCodigo = gridProdutoAgencia.DataKeys[index]["prdCodigo"].ToString();<br /><br />                    if (_produtoAgenciaBancoClienteBRL.deleteProdutoAgenciaBancoCliente(dto))<br />                    {<br />                        Response.Redirect("CadastroProdutoAgenciaCliente.aspx");<br />                    }<br />                }<br />            }<br />            catch (Exception ex)<br />            {<br />                lblErro.Text = ex.Message.ToString();<br />            }<br />        } 

O
código que está em anexo atribui as chaves para dentro de uma dto instanciada:

int index = int.Parse((string)e.CommandArgument);<br /><br />gridProdutoAgencia.DataKeys[index]["banCod"].ToString();<br />gridProdutoAgencia.DataKeys[index]["ageCod"].ToString();<br />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.

Com mais de 20 anos trabalhando no mercado de tecnologia. Mestre em Engenharia Elétrica voltada para o mundo mobile, com mais de 20 livros publicados e cerca de 700 artigos publicados com intuito de ajudar àqueles que querem aprender a programar (site, software, desktop, serviços, api e mobile). Site pessoal: https://www.mauriciojunior.net - MVP, MCAD, MCP Microsoft

Ver perfil