Dev (Back & Front)ARTIGO

Trabalhando com GridView e RowCommand

O trabalho com GridView é bem legal, isto é, ajuda muito o desenvolvedor e funciona bem. Antigamente, para o povo de ASP 3.0, toda tabela era programada manualmente e agora é possível usar um componente funcional com pequenas linhas de código. Porém, muitos não prestam atenção e o recurso acaba não funcionando.

Referências:

  • Ferramenta:
    Visual Studio .NET 2008
  • Linguagem C#.NET
  • Plataforma: Web

O objetivo deste artigo é mostrar como
utilizar o RowCommand com GridView. Mostro como apenas deletar um dado do banco
de dados clicando no botão dentro do grid.

 <asp:GridView ID="gridUsuario" runat="server" Width="100%"<br />                    AutoGenerateColumns="false" onrowcommand="gridUsuario_RowCommand"><br />                <Columns><br />                    <asp:BoundField DataField="NO_USUARIO" HeaderText="Usuário" /><br />                    <asp:BoundField DataField="NO_SISTEMA" HeaderText="Sistema" /><br />                    <asp:BoundField DataField="CH_AUTENTICACAO" HeaderText="Id" /><br />                    <asp:ButtonField ButtonType="Image" CommandName="Delete"<br />                    ImageUrl="~/App_Themes/Padrao/image/fechar.jpg"<br />                    ControlStyle-Width="15" HeaderText="Excluir"/> <br />                </Columns><br />               </asp:GridView>

A primeira coisa é gerar o grid com os
campos que preciso para aparecer na tabela. A tag <asp:BoudField> é um
campo normal. Dentro deste campo, existe a propriedade chamada DataField, coloquei o nome que veio do meu banco de dados, ou seja, da tabela do meu banco
de dados. Note que para cada campo eu fiz a mesma coisa, só o último que não. É
um pouco diferente.

Depois disto, note que no início do
<asp:GridView> existe uma propriedade chamada onRowCommand com o valor
“gridUsuario_RowCommand”. Por que ele colocou esse valor? Porque o Id do
GridView chama “gridUsuario” com isso, o software atribui automaticamente o nome
“underline” ao comando que, no nosso caso, é RowCommand.

Para atribuir este OnRowCommand é
necessário mudar a aba na apresentação para Design ou Split. Automaticamente
aparecerá o grid:

Depois de selecionado, acessei as
propriedades e cliquei em Events:

Selecionei a Ação RowCommand clicando
duas vezes. Automaticamente foi criado o nome gridUsuarioRowCommand. Dessa forma, no grid foi acrescentada aquela
linha de comando [onrowcommand=”gridUsuario_RowCommand]

Além disso, um método foi criado:

protected void gridUsuario_RowCommand(object sender, GridViewCommandEventArgs e)<br /><br />{} 

Voltando para a página de apresentação,
criei um novo campo para armazenar uma imagem com função de botão:

<asp:ButtonField ButtonType="Image" CommandName="Delete"<br />                    ImageUrl="~/App_Themes/Padrao/image/fechar.jpg"<br />                    ControlStyle-Width="15" HeaderText="Excluir"/>

Coloquei o tipo de
botão com a propriedade ButtonType e o valor Image. Depois informei o nome do
comando que será executado, CommandName=”Delete”. Escolhi para aparecer uma
imagem, em vez de aparecer um texto; caso queira deixar deixar um texto, não tem
problema algum. Para finalizar, coloquei o nome do título da coluna chamada
“Excluir”, aquele título que fica lá em cima.

É lógico que não parou por aí. Agora
preciso colocar o código principal para que depois de acionado o clique execute
o comando Delete:

 protected void gridUsuario_RowCommand(object sender, GridViewCommandEventArgs e)<br />        {<br />            if (e.CommandName == "Delete")<br />            {<br />                int index = int.Parse((string)e.CommandArgument);<br />                string chaveDelete = gridUsuario.Rows[index].Cells[2].Text;<br /><br />                _usuario.deleteUsuario(Convert.ToInt32(chaveDelete));<br />                Response.Redirect("manterusuario.aspx");<br />            }<br />        }

A primeira coisa foi perguntar se esse
comando é igual a “Delete”. Se for, com o mesmo argumento, pego o index
referente à linha selecionada, que precisa ser identificada
para saber qual a linha preciso deletar. A minha chave principal está na coluna
2, ou seja, a chave da tabela de dados.

Com o index selecionado, basta pegar o
valor do texto na coluna 2:

string chaveDelete = gridUsuario.Rows[index].Cells[2].Text;

 Depois de pegar o
valor correto que preciso, só chamei o método de negócio, passando os parâmetros,
e redirecionei para a mesma página:

            <br />  _usuario.deleteUsuario(Convert.ToInt32(chaveDelete));<br />          <br />  Response.Redirect("manterusuario.aspx");

Além disso, você pode colocar mensagens
de confirmação e tudo mais. Fica aí uma dica para incrementar. O resultado
final é esse:

 

Como as informações são confidenciais,
escolhi riscá-las.

Não falei como conectar no banco de
dados nem nada, só quis mostrar como deixar funcionando o uso do componente
gridView com o comando RowCommand. As questões com o banco de dados de select e
delete são com você.

Espero que tenha gostado
qualquer coisa só entrar em contato!

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