none
Pegar dados da linha de um Gridview, usando um botão. RRS feed

  • Pergunta

  • Olá pessoal

    Tenho aqui um Gridview com um botão em cada linha.
    Minha intenção é recuperar os dados da linha quando clicar no botão correspondente.

    Criei o código a seguir dentro do evento RowCommand do GridView:

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName=="validar")
                {
                    GridViewRow linha = (GridViewRow)((Button)e.CommandSource).NamingContainer;
                    Label1.Text = linha.Cells[2].Text;
                    
                }
                
            }

    Ele compila, mas quando executo o clico no botão, uma exption de cast é lançada:

    Unable to cast object of type 'System.Web.UI.WebControls.GridView' to type 'System.Web.UI.WebControls.Button'.

    Obrigado desde já pela ajuda!!

    sábado, 12 de abril de 2014 18:35

Respostas

  • Olá, leia 1 o index de sua linha(row) usando CommandArgument e depois vc consegue ler normalmente o valor da celula de acordo com o indice por exemplo :

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "validar")
                {
                    int index = int.Parse(e.CommandArgument.ToString());
                    Label1.Text = GridView1.Rows[index].Cells[2].Text;
                    Response.Write(GridView1.Rows[index].Cells[2].Text);
                }
            }

    • Marcado como Resposta Rodrigo Calado segunda-feira, 14 de abril de 2014 13:14
    segunda-feira, 14 de abril de 2014 11:12

Todas as Respostas

  • Como esta o seu aspx de seu datagrid ?
    sábado, 12 de abril de 2014 19:18
  • Na verdade é um Gridview

    Este é o codigo que implementa ele:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" 
                GridLines="None" 
                onrowdatabound="GridView1_RowDataBound" Width="888px" 
                onselectedindexchanged="GridView1_SelectedIndexChanged">
                <AlternatingRowStyle BackColor="White" />
                <Columns>
                    <asp:CommandField SelectText="Validar" ShowSelectButton="True" />
                    <asp:HyperLinkField DataNavigateUrlFields="id" 
                        DataNavigateUrlFormatString="~/Ssituacao/detalhesValidar.aspx?id={0}" 
                        Text="Detalhes" />
                    <asp:BoundField DataField="id" HeaderText="id" SortExpression="id" />
                    <asp:BoundField DataField="situacaoDesejada" HeaderText="Situação Desejada" 
                        SortExpression="situacaoDesejada" />
                    <asp:BoundField DataField="acaoViabilizadora" HeaderText="Ação Viabilizadora" 
                        SortExpression="acaoViabilizadora" />
                </Columns>
                <EditRowStyle BackColor="#2461BF" />
                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                <RowStyle BackColor="#EFF3FB" />
                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                <SortedAscendingCellStyle BackColor="#F5F7FB" />
                <SortedAscendingHeaderStyle BackColor="#6D95E1" />
                <SortedDescendingCellStyle BackColor="#E9EBEF" />
                <SortedDescendingHeaderStyle BackColor="#4870BE" />
            </asp:GridView>

    sábado, 12 de abril de 2014 19:22
  • Olá, leia 1 o index de sua linha(row) usando CommandArgument e depois vc consegue ler normalmente o valor da celula de acordo com o indice por exemplo :

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "validar")
                {
                    int index = int.Parse(e.CommandArgument.ToString());
                    Label1.Text = GridView1.Rows[index].Cells[2].Text;
                    Response.Write(GridView1.Rows[index].Cells[2].Text);
                }
            }

    • Marcado como Resposta Rodrigo Calado segunda-feira, 14 de abril de 2014 13:14
    segunda-feira, 14 de abril de 2014 11:12
  • Era exatamente isso.

    Obrigado!

    segunda-feira, 14 de abril de 2014 13:14