Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

Recuperando a linha do GridView

Muitas pessoas me perguntam como acessar o conteúdo de uma linha do GridView dentro do evento RowCommand (sim, elas NÃO ESTÃO fazendo o uso do DataKeys). Pois bem, nas versões 1.x do ASP.NET, o evento ItemCommand do DataGrid tinha um argumento do tipo DataGridCommandEventArgs e, dentro deste, uma propriedade chamada Item que retorna a instancia da linha corrente.

Isso não existe mais no GridView e, se ainda desejar acessar os dados da linha clicada no evento RowCommand do GridView, terá que proceder da seguinte forma: no evento RowCreated do GridView, terá que definir à propriedade CommandArgument do controle LinkButton (Button, ImageButton, etc) responsável por disparar o comando, a propriedade RowIndex que vem como parametro para este evento. Esta propriedade retorna um valor inteiro contendo o índice da linha e, como o evento RowCommand te fornece uma propriedade chamada CommandArgument, conseguirá recuperar o índice da linha e, consequentemente, acessar os valores da mesma.

Para ilustar o processo, o código (em C#) é mostrado abaixo:

private void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
{
   if(e.CommandName=="Add")
   {
      int index = Convert.ToInt32(e.CommandArgument);
      GridViewRow row = GridView1.Rows[index];
      Response.Write(row.Cells[2].Text);
   }
}

private void GridView1_RowCreated(Object sender, GridViewRowEventArgs e)
{
   if(e.Row.RowType == DataControlRowType.DataRow)
   {
      LinkButton addButton = (LinkButton)e.Row.Cells[0].Controls[0];
      addButton.CommandArgument = e.Row.RowIndex.ToString();
   }
}

posted on Thursday, April 27, 2006 3:18 PM

Feedback

# re: Recuperando a linha do GridView 8/1/2006 1:36 AM Elysson

Olá Israel,

Estou com um pouco de dificuldades para entender este código... No meu caso, eu inseri um template button na gridview e gostaria de saber em qual linha eu estou quando eu clicasse nele... Será que você poderia me ajudar?

# re: Recuperando a linha do GridView 8/1/2006 5:49 PM Israel Aece

Ola Elysson,

Se tem um LinkButton dentro dessa sua Template, então pode fazer algo como:

LinkButton addButton = (LinkButton)e.Row.FindControl("LinkButton1");
addButton.CommandArgument = e.Row.RowIndex.ToString();

# re: Recuperando a linha do GridView 4/20/2007 1:00 AM Glauber

É difícil de entender porque que a Microsoft fez isso! Se antes você tinha um "e.item" no evento ItemCommand do DataGrind, qual é o problema deles terem incluido um bendito "e.row" no evento RowCommand?????? Não tem nada de mal em saber qual é a linha em questão no evento RowCommand! Agora tem que fazer a maior gambiarra com o evento RowCreated!

# re: Recuperando a linha do GridView 4/20/2007 9:45 PM Israel Aece

Ola Glauber,

Provavelmente por uma questão de performance. Se uma minoria utilizava, é mais informação para ser guardada no Viewstate, o que poderia comprometer a performance da aplicação.

# re: Recuperando a linha do GridView 9/25/2007 8:14 PM Vitor

Depois de muita busca consegui solucao para minha duvida atraves deste seu artigo , mto bom ..

Valeu

# re: Recuperando a linha do GridView 11/8/2007 6:44 PM Rafael Trindade

Nossa !!! Estava precisando muito dessa dica, fiquei perdido quando vi que não tinha e.row no rowcommand.

# re: Recuperando a linha do GridView 1/11/2008 5:39 PM Marcelo

E se o meu controle já tiver um CommandArgument definido, tipo um Id de alguma coisa?

# re: Recuperando a linha do GridView 1/12/2008 7:33 PM Israel Aece

Ola Marcelo,

Tente acessar então através do CommandSource.

# re: Recuperando a linha do GridView 1/12/2008 7:34 PM Israel Aece

Ola Marcelo,

Tente através do CommandSource.

# re: Recuperando a linha do GridView 3/26/2008 3:15 AM Marcelo

Olá Israel,

Tentei usar o CommandSource e não consegui, como eu faria?

# re: Recuperando a linha do GridView 3/26/2008 3:45 AM Marcelo

Opa Israel,

Consegui fazendo assim:

protected void gvUsuario_RowCommand(object sender, GridViewCommandEventArgs e)
{
WebControl wc = ((WebControl)e.CommandSource);
GridViewRow row = ((GridViewRow)wc.NamingContainer);
row.Style.Value += "background-color:#FF0000;";
}

vlw.

# re: Recuperando a linha do GridView 5/15/2008 5:17 PM Redner

Ola Israel,

To com o mesmo problema do Marcelo, quero usar o CommandArgument pra um ID e e.CommandSource nao contem o botao que disparou o evento mas sim o GridView, assim como o sender.

Alguma dica?
Senao vou acabar fazendo alguma gambiarra e passar os dois argumentos atraves do CommandArgument

Valew

# re: Recuperando a linha do GridView 5/19/2008 1:30 AM Israel Aece

Boas,

Uma vez que você tem acesso a linha do GridView, você conseguirá recuperar qualquer item da mesma, inclusive as DataKeys que, na maioria das vezes, retorna o ID do registro.

# re: Recuperando a linha do GridView 11/19/2008 4:21 PM Sabino diego spader

Bom dia, eu to precisando recuperar o valor da linha usando templatefield.
abaixo está oque eu tenho:

<asp:TemplateField HeaderText="Acoes">
<ItemTemplate>

<asp:Button OnClientClick="return editar();" ID="btnEditar" CommandArgument="Editar" CausesValidation="False" runat="server" Text="Editar" />

<asp:Button OnClientClick="return excluir();" ID="btnExcluir" CommandArgument="Excluir"
CausesValidation="False" runat="server" Text="Excluir" />

</ItemTemplate>
</asp:TemplateField>

Usando o rowcommand quando eu digito " e. " tenho poucas opcoes acessiveis:
command name
commang argument
command source
equals
gethashcode
gettype
tostring

Passando o mouse por cima do "e" consigo achar a linha porém ela está como non-public (não publica) nao sei como acessar ela e armazenar em uma variavel "linha". Estou usando templateFiel porque quando eu clico no botao editar ou excluir tenho que chamar uma funcao javascript para mostrar uma msg na tela para o usuario confirmar se quer ou nao editar/deletar.

Usando commandFiel eu consigo achar a linha tranquilamente, usando oque voce escreveu e de outra maneira tbm, mais esse nao eh o maioor problema.
Na verdade tenho dois problemas, uma solucao já me ajuda.

1) Pegar o valor da linha usando templatefield.
2) Chamar funcao javascript usando commandfiel.

Se voce puder ajudar.

muito obrigado
e desculpe o incomodo.

boa semana


meu e mail: sabino.ecp@gmail.com

# re: Recuperando a linha do GridView 11/20/2008 2:33 AM Israel Aece

Boas Sabino,

Veja se o artigo pode te ajudar em algo: http://www.projetando.net/Sections/ViewArticle.aspx?ArticleID=43&File=Delete

# re: Recuperando a linha do GridView 11/20/2008 2:51 PM Sabino diego spader

Opa, obrigado por responder. Acabei de chegar na empresa, vim tentar resolver esse problema. Dae dentro la da opcao "edit coluns" do gridview
eu cliquei em cima dos commandfiel e vi que tinha um link embaixo escrito +- assim "convert to intemTemplate" dae eu fiz :o hehe cliquei e fui ver no source oque havia acontecido. Executei e percebi que ainda funcionava tudo como antes, entao voltei no codigo e apertei um ctrl+barra e achei os eventos onclientclick on click tudo como eu queria que antes nao tinha. Dae só chamei a função javascript que queria e pronto.
Terminei. :D
Mesmo assim muito obrigado. Vou ler oque voce me enviou.

Boa semana

# re: Recuperando a linha do GridView 11/20/2008 3:09 PM Sabino diego spader

hehe
Bom dia, se eu nao tivesse achado o convert to TemplateField antes de ler seu artigo concerteza isso resolveria o meu problema. :D Muito obrigado por ter respondido tão rápido.
Estou aprendendo SQL agora e seu artigo vai me ajudar.

Boa semana

Title  
Name  
Url
Box Code
Protected by FormShield
Comments