Seções iMasters
.NET

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%"
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!

Comente também

5 Comentários

Ótimo post, parabéns!

Maravilho, era exatamente o que eu estava procurando!Muito Obrigada

Saulo

Muito bom este post, precisava exatamente disso! valeu mesmo.

Renato Schroeder

Muito boa sua dica colega. Foi muito útil!!! Abraço.

Eduardo

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?

Qual a sua opinião?