none
como criar um evento quando clicar em alguma linha do gridview RRS feed

  • Pergunta

  • Olá amigos, como criar um evento quando clicar em alguma linha do gridview sem a necessidade de botão, por exemplo: tenho uma coluna de imagens e quando clicar em alguma imagem independente da linha realizar algum evento, tenho muitas duvidas em relação a isso, então se vocês tiverem alguma outra forma de realizar isso irei agradecer muito, obrigado.
    terça-feira, 11 de março de 2014 00:48

Respostas

  • Lennon, Bom dia.

    Existem dois jeitos de se fazer isso, uma rodando um evento no lado servidor através de algum comando e o mesmo é captura no lado servidor através do CommandName da função OnRowCommand a outra maneira seria executar no lado cliente, na hora que você for montar a GridViews você chama o Evento RowDataBound, esse evento é chamado no momento em que sua GridViews foi montada, você captura a linha atual, define uma div com o evento de OnClick, exemplo:

    void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
      {
    
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
          e.Row.Cells[1].Text = "<a onclick='Alert('Clicou');' style=' display:block; width:100%; height:30px; '>" + e.Row.Cells[1].Text + "</i>";
    
        }
    
      }

    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Marcado como Resposta Giovani Cr quinta-feira, 13 de março de 2014 14:55
    terça-feira, 11 de março de 2014 09:34
  • Olá,

    Bom, você pode adicionar uma TemplateField em alguma coluna do seu GridView e adicionar na ItemTemplate um ImageButton que vai cumprir este papel:

    <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:ImageButton ID="ImageButton1" runat="server" CommandName="Editar" ImageUrl=".." />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

    O controle ImageButton é uma imagem com características de botão (ou vice-versa).

    A propriedade ImageUrl é a Url da imagem.

    CommandName e CommandArgument são o nome e o(s) argumento(s) do comando que você vai atribuir (cfme. sua necessidade) ao controle para manipular no evento GridView1_RowCommand:

    Fiz este exemplo, espero que ajude:

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataTable table = new DataTable();
                table.Columns.Add("A");
                table.Columns.Add("B");
                table.Columns.Add("C");
    
                table.Rows.Add("A..", "B..", "C..");
                table.Rows.Add("A..", "B..", "C..");
                table.Rows.Add("A..", "B..", "C..");
    
                GridView1.DataSource = table;
                GridView1.DataBind();
            }
        }
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Editar")
                Response.Write(e.CommandName + " - " + e.CommandArgument);
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton ibtn = new ImageButton();
    
                ibtn = (ImageButton) e.Row.Cells[0].FindControl("ImageButton1");
                ibtn.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

    • Marcado como Resposta Giovani Cr quinta-feira, 13 de março de 2014 14:55
    terça-feira, 11 de março de 2014 07:59

Todas as Respostas

  • Olá,

    Bom, você pode adicionar uma TemplateField em alguma coluna do seu GridView e adicionar na ItemTemplate um ImageButton que vai cumprir este papel:

    <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:ImageButton ID="ImageButton1" runat="server" CommandName="Editar" ImageUrl=".." />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

    O controle ImageButton é uma imagem com características de botão (ou vice-versa).

    A propriedade ImageUrl é a Url da imagem.

    CommandName e CommandArgument são o nome e o(s) argumento(s) do comando que você vai atribuir (cfme. sua necessidade) ao controle para manipular no evento GridView1_RowCommand:

    Fiz este exemplo, espero que ajude:

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataTable table = new DataTable();
                table.Columns.Add("A");
                table.Columns.Add("B");
                table.Columns.Add("C");
    
                table.Rows.Add("A..", "B..", "C..");
                table.Rows.Add("A..", "B..", "C..");
                table.Rows.Add("A..", "B..", "C..");
    
                GridView1.DataSource = table;
                GridView1.DataBind();
            }
        }
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Editar")
                Response.Write(e.CommandName + " - " + e.CommandArgument);
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton ibtn = new ImageButton();
    
                ibtn = (ImageButton) e.Row.Cells[0].FindControl("ImageButton1");
                ibtn.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

    • Marcado como Resposta Giovani Cr quinta-feira, 13 de março de 2014 14:55
    terça-feira, 11 de março de 2014 07:59
  • Lennon, Bom dia.

    Existem dois jeitos de se fazer isso, uma rodando um evento no lado servidor através de algum comando e o mesmo é captura no lado servidor através do CommandName da função OnRowCommand a outra maneira seria executar no lado cliente, na hora que você for montar a GridViews você chama o Evento RowDataBound, esse evento é chamado no momento em que sua GridViews foi montada, você captura a linha atual, define uma div com o evento de OnClick, exemplo:

    void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
      {
    
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
          e.Row.Cells[1].Text = "<a onclick='Alert('Clicou');' style=' display:block; width:100%; height:30px; '>" + e.Row.Cells[1].Text + "</i>";
    
        }
    
      }

    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Marcado como Resposta Giovani Cr quinta-feira, 13 de março de 2014 14:55
    terça-feira, 11 de março de 2014 09:34