Trabalhando com GridView, RowCommand e DataKeysNames
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 blog.mauriciojunior.org
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.