
Olá pessoal, em março eu publiquei um artigo aqui falando diretamente do uso dos componentes GridView e RowCommand. Falei sobre esses dois assuntos mas, para ficar melhor para entender, deixei de fora uma propriedade do componente GridView, o chamado
DataKeysNames.
Por isso, resolvi escrever agora falando desse componente GridView: ação RowCommand e propriedade DataKeysNames.
Referências
- Ferramenta:
Visual Studio .NET 2008 - Linguagem: C#.NET
- Plataforma: Web
Antigamente, não existia esse
componente chamado GridView, era DataGrid. Na atualização do framework e
ferramenta de desenvolvimento Visual Studio.NET, eles criaram esse novo
componente chamado GridView com algumas importantes alterações e melhorias.
Como
resultado final do artigo anterior, se o usuário trocasse a coluna da chave, no meu caso CH_AUTENTICACAO, o software
deixaria de funcionar, pois ao tentar pegar, a chave viria outro dado.
Este
problema existia também com o DataGrid, e na versão mais nova colocaram uma
solução de chave mais simples e específica. O mais importante é que, se a
posição das tabelas for alterada, não terá problema algum em pegar a chave comCommand.
Com a mesma estrutura do artigo
anterior, veremos o passo a passo para colocar a chave e pegar essa mesma chave de acordo com a
linha selecionada.
<asp:GridView ID="gridUsuario" runat="server" Width="100%"<br /> AutoGenerateColumns="false" onrowcommand="gridUsuario_RowCommand" DataKeyNames="CH_AUTENTICACAO"><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” e, 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 (veja a imagem 01). Veja
que agora há mais uma propriedade, chamada DataKeyNames,
antes das colunas definidas, ou seja, da palavra Columns. Como valor dessa propriedade DataKeyNames coloquei a chave da minha tabela do banco de dados
chamada CH_AUTENTICACAO.

Imagem 01
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 acrescentado aquela
linha de comando [onrowcommand=”gridUsuario_RowCommand]. Além disso, um método foi criado:
protected void gridUsuario_RowCommand(object sender,GridViewCommandEventArgs e)<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 ao invés de um texto; caso queira deixar deixar um texto, não há 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 ai, 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 chave = gridUsuario.DataKeys[index]["CH_AUTENTICACAO"].ToString();<br /><br /> _usuario.deleteUsuario(Convert.ToInt32(chave));<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. A linha selecionada precisa ser identificada
para saber qual a que preciso deletar. A minha chave principal está dentro da
propriedade DataKeysNames, ou seja, a chave da tabela de dados.
Com o index selecionado, basta colocar
o campo chave da minha tabela:
string chave = gridUsuario.DataKeys[index]["CH_AUTENTICACAO"].ToString();Depois de pegar o
valor correto, chamei o método de negócio passando os parâmetros e redirecionei
para a mesma página.
<br /> _usuario.deleteUsuario(Convert.ToInt32(chave));<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 é com você.
Espero que tenha gostado
qualquer coisa só entrar em contato.








