Olá pessoal, dia23 de março de 2010 eu criei um artigo [http://aspneti.com/trabalhando+com+GridView+e+RowCommand+812,0.aspx]que falava diretamente do uso dos componentes GridView e RowCommand. Lógico quecom o título só abordei esses dois assuntos para ficar mais fácil de entender.Só que não abordei uma propriedade do componente GridView, o chamadoDataKeysNames.
Dessa forma, resolvi criar um artigofalando do componente GridView, ação RowCommand e propriedade DataKeysNames.
Referência:
Ferramenta:Visual Studio .NET 2008
Linguagem C#.NET
Plataforma: Web
Nível: Iniciante
Antigamente, não existia essecomponente chamado GridView, era DataGrid. Na atualização do framework eferramenta de desenvolvimento Visual Studio.NET, eles criaram esse novocomponente chamado GridView com algumas importantes alterações e melhorias.
Comoresultado fina do artigo anterior, [http://aspneti.com/trabalhando+com+GridView+e+RowCommand+812,0.aspx]se o usuário trocar a coluna da chave, no meu caso CH_AUTENTICACAO, o softwaredeixa de funcionar, pois ao tentar pegar a chave virá outro dado.
Esteproblema existia também com o DataGrid e na versão mais nova colocaram umasolução de chave mais simples e específica. O mais importante é que se aposição das tabelas foi alterada, não terá problema algum em pegar a chave comCommand.
Com a estrutura do mesmo artigoanterior [aspneti.com/trabalhando+com+GridView+e+RowCommand+812,0.aspx] mostropasso a passo como colocar a chave e pegar essa mesma chave de acordo com alinha selecionada.
|
<asp:GridView ID="gridUsuario" runat="server" Width="100%"
AutoGenerateColumns="false" onrowcommand="gridUsuario_RowCommand" DataKeyNames="CH_AUTENTICACAO">
<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>
|
Code 1.1
A primeira coisa é gerar o grid com oscampos que preciso para aparecer na tabela. A tag <asp:BoudField> é umcampo normal. Dentro este campo, existe a propriedade chamada DataField cujocoloquei o nome que veio do meu banco de dados, ou seja, da tabela do meu bancode dados. Note que para cada campo eu fiz a mesma coisa, só o último que não. Éum pouco diferente.
Depoisdisto, note que no início do <asp:GridView> existe uma propriedadechamada onRowCommand com o valor “gridUsuario_RowCommand”. Porque ele colocouesse valor? Porque o Id do GridView chama “gridUsuario” com isso, o softwareatribui automaticamente o nome “underline” o comando que, no nosso caso éRowCommand.
Paraatribuir este OnRowCommand é necessário mudar a aba na apresentação para Designou Split. Automaticamente aparecerá o grid. (Imagem 1)
Vejaque agora tem mais uma propriedade chamada DataKeyNamesantes das colunas definidas, ou seja, da palavra Columns. Como valor dessa propriedade DataKeyNames coloquei a chave da minha tabela do banco de dadoschamada CH_AUTENTICACAO.
<!--[if gte vml 1]> 
Imagem 1
Depois de selecionado acessei aspropriedades e cliquei em Events. (Imagem 2)

Imagem 2
Selecionei a Ação RowCommand clicandoduas vezes. Automaticamente foi criado o nome gridUsuarioRowCommand. Dessa forma, no grid foi acrescentado aquelalinha de comando. [onrowcommand="gridUsuario_RowCommand]
Além disso, um método foi criado. (Code2)
|
protected void gridUsuario_RowCommand(object sender, GridViewCommandEventArgs e)
{} |
Code 2
Voltando para a página de apresentação,criei um novo campo para armazenar uma imagem com função de botão. (Code 3)
|
<asp:ButtonField ButtonType="Image" CommandName="Delete"
ImageUrl="~/App_Themes/Padrao/image/fechar.jpg"
ControlStyle-Width="15" HeaderText="Excluir"/>
|
Code 3
Coloquei o tipode botão com a propriedade ButtonType e o valor Image. Depois informei o nomedo comando que será executado, CommandName=”Delete”. Escolhi para aparecer umaimagem em vez de aparecer um texto, caso queira deixar deixar um texto, não temproblema 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, agorapreciso colocar o código principal para que depois de acionado o clique executeo comando Delete. (Code 4)
|
protected void gridUsuario_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
int index = int.Parse((string)e.CommandArgument);
string chave = gridUsuario.DataKeys[index]["CH_AUTENTICACAO"].ToString();
_usuario.deleteUsuario(Convert.ToInt32(chave));
Response.Redirect("manterusuario.aspx");
}
}
|
Code 4
A primeira coisa foi perguntar se essecomando é igual a “Delete”, se for igual, com o mesmo argumento, pego o indexreferente a linha selecionada. A linha selecionada precisa ser identificadapara saber qual a linha preciso deletar. A minha chave principal está dentro dapropriedade DataKeysNames, ou seja, a chave da tabela de dados.
Com o index selecionado, basta colocaro campo chave da minha tabela. (Code 5)
|
string chave = gridUsuario.DataKeys[index]["CH_AUTENTICACAO"].ToString();
|
Code 5
Depois de pegar ovalor correto, chamei o método de negócio passando os parâmetros e redirecioneipara a mesma página. (Code 6)
|
_usuario.deleteUsuario(Convert.ToInt32(chave));
Response.Redirect("manterusuario.aspx");
|
Code 6
Além disso, você pode colocar mensagensde confirmação e tudo mais. Fica ai uma dica para incrementar. O resultadofinal é esse. (Imagem 3)

Imagem 3
Como as informações são confidenciais,escolhi riscá-las.
Não falei como conectar no banco dedados nem nada, só quis mostrar como deixar funcionando o uso do componentegridView com o comando RowCommand. As questões com o banco de dados de select edelete é com você.
Espero que tenha gostadoqualquer coisa só entrar em contato pelo site.
Mauricio Junior
www.mauriciojunior.org
blog.mauriciojunior.org