Trabalhando com GridView e RowCommand

Mauricio Junior
em .NET

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%"
AutoGenerateColumns="false" onrowcommand="gridUsuario_RowCommand">
<Columns>
<asp:BoundField DataField="NO_USUARIO" HeaderText="Usuário" />
<asp:BoundField DataField="NO_SISTEMA" HeaderText="Sistema" />
<asp:BoundField DataField="CH_AUTENTICACAO" HeaderText="Id" />
<asp:ButtonField ButtonType="Image" CommandName="Delete"
ImageUrl="~/App_Themes/Padrao/image/fechar.jpg"
ControlStyle-Width="15" HeaderText="Excluir"/>
</Columns>
</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)

{}

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"
ImageUrl="~/App_Themes/Padrao/image/fechar.jpg"
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)
{
if (e.CommandName == "Delete")
{
int index = int.Parse((string)e.CommandArgument);
string chaveDelete = gridUsuario.Rows[index].Cells[2].Text;

_usuario.deleteUsuario(Convert.ToInt32(chaveDelete));
Response.Redirect("manterusuario.aspx");
}
}

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:

            
_usuario.deleteUsuario(Convert.ToInt32(chaveDelete));
          
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!

Mauricio Junior

Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e Mestre em Engenharia Elétrica pela Universidade de Brasília. Com 30 anos, possui sete livros publicados pela editora Ciência Moderna. É certificado Microsoft MCP, MCAD e MVP. Trabalha como Analista Sênior na empresa ATP S.A. http://www.mauriciojunior.org

Comentários

Para comentar no iMasters você precisa estar logado.

O iMasters possui mais de 13 mil textos publicados, em 13 anos já somos uma comunidade de mais 350 mil pessoas. Cadastre-se agora mesmo GRATUITAMENTE e tenha acesso a todo o mundo iMasters.

Já tenho conta Quero me cadastrar
  1. Estou precisando de algo deste tipo. Porém meus botões (imagebutton) são adicionados dinamicamente. Sendo assim, como defino o tratamento de click? Pode me ajudar?

Este projeto é mantido e patrocinado pelas empresas: