none
Acionar Evento RRS feed

  • Pergunta

  • Bom Dia!

    Eu tenho um gridview e numa das colunas coloquei um image button. Eu quero que ao clicar nesse image button, aconteça "alguma coisa", mas não estou conseguindo acionar o evento click desse botão.

    O código está dessa forma:

    Protected Sub imbTeste_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
        ............................
    End Sub



    Protected Sub gv_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gv.RowDataBound
        If e.Row.RowType = DataControlRowType.Header Then
            ...........
        ElseIf e.Row.RowType = DataControlRowType.DataRow Then
            Dim imbTeste As ImageButton = TryCast(e.Row.FindControl("imbTeste"), ImageButton)

            imbTeste.ImageUrl = "~/img/xxx.gif"

            AddHandler imbTeste.Click, AddressOf imbTeste_Click
        End If
    End Sub

    Não está dando erro de compilação nem nada, mas também quando clico no botão, não está acionando o evento click.

    Alguém pode me ajudar?

    Obrigada

    segunda-feira, 8 de março de 2010 13:23

Respostas

  • Juliana,

    Você não precisa (e nem pode!) adicionar o RowCommand no evento click do botão. Esse evento é do GridView e é nele que você deve implementar.

    gvwEstoque.RowCommand += new GridViewCommandEventHandler(gv_RowCommand);

    Ao fazer isso, qualquer botão que estiver dentro do gridview, quando clicado, vai entrar nesse evento. Você só precisa tratar o sender e o e.

    Resumindo, ao clicar em um botão que está dentro de um GridView, o RowCommand é o evento disparado e não o evento Click do botão.

    Paulo Castilho - www.paulocastilho.com.br
    • Sugerido como Resposta Paulo Castilho segunda-feira, 8 de março de 2010 16:55
    • Marcado como Resposta Juliana Machado segunda-feira, 8 de março de 2010 18:14
    segunda-feira, 8 de março de 2010 16:54

Todas as Respostas

  • Eu fiz assim e deu
    1. Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    2.    
    3.     Dim img As New ImageButton()
    4.        
    5.     AddHandler img.Click, AddressOf img_Click
    6. End Sub
    7. Private Sub img_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
    8.     Throw New NotImplementedException()
    9. End Sub

    segunda-feira, 8 de março de 2010 14:00
    Moderador
  • Olá!

    Eu fiz aqui usando esse seu código, e não aparece nenhum botão!!

    Criei um image button no aspx com esse nome: img, deixei o código desse jeito, o botão agora aparece, mas quando clico nele não é acionado o evento click dele :(

    segunda-feira, 8 de março de 2010 14:33
  • Olá, Juliana.

    O que você fez funcionaria, se o botão não estivesse dentro do GridView.

    Como está dentro do GridView, implemente o evento RowCommand deste grid e teste clicar no botão.

    Paulo Castilho - www.paulocastilho.com.br
    • Sugerido como Resposta Paulo Castilho segunda-feira, 8 de março de 2010 16:55
    segunda-feira, 8 de março de 2010 14:38
  • Sim eu fiz um so de teste, vc tem que pegar faltou a parte que adicona o controle no form :)
    segunda-feira, 8 de março de 2010 14:41
    Moderador
  • Paulo,

    Criei o handler RowCommand para o gridview, mas não consigo dar 1 find control no image button para atribuir o evento click usando addhandler: Dim imbTeste As ImageButton = TryCast(e.Row.FindControl("imbTeste"), ImageButton). O event arg e não possui a propriedade Row!!


    Seilor,

    Fiz esse teste seu criando o image button fora do gridview (só para testar mesmo), e seguindo esse código que você me passou, e o evento click nunca é executado quando clico no botão. Tem certeza que não está faltando nada nesse seu código?

    segunda-feira, 8 de março de 2010 15:19
  • Da uma lida
    http://support.microsoft.com/kb/317794
    http://forums.asp.net/p/1286956/3654085.aspx
    segunda-feira, 8 de março de 2010 16:25
    Moderador
  • Juliana,

    Você não precisa (e nem pode!) adicionar o RowCommand no evento click do botão. Esse evento é do GridView e é nele que você deve implementar.

    gvwEstoque.RowCommand += new GridViewCommandEventHandler(gv_RowCommand);

    Ao fazer isso, qualquer botão que estiver dentro do gridview, quando clicado, vai entrar nesse evento. Você só precisa tratar o sender e o e.

    Resumindo, ao clicar em um botão que está dentro de um GridView, o RowCommand é o evento disparado e não o evento Click do botão.

    Paulo Castilho - www.paulocastilho.com.br
    • Sugerido como Resposta Paulo Castilho segunda-feira, 8 de março de 2010 16:55
    • Marcado como Resposta Juliana Machado segunda-feira, 8 de março de 2010 18:14
    segunda-feira, 8 de março de 2010 16:54
  • Paulo,

    Funcionou!! Agora entendi o funcionamento do row command, rs. Era isso mesmo que eu queria.

    Muito obrigada a todos vocês que me ajudaram.

    beijinhos
    segunda-feira, 8 de março de 2010 18:13