Fazer uma PerguntaFazer uma Pergunta
 

RespondidoGridView - Registrar eventos

  • terça-feira, 3 de novembro de 2009 15:45Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Bom galera, tenho a seguinte situação. Tenho um metodo que recebe uma GridView como parâmetro, esse metodo eu invoquo ele no pageLoad da pagina.
    Nessa GridView eu registro o evento de Sorting. Mas estou querendo registrar um evento de RowCommand.
    O evento de Sorting que eu registrei nessa grid funciona normalmente mais o de rowCommand nem chega no evento.

    Alguém pode me dizer como posso estar resolvendo isso?
    Davi Nogueira

Respostas

  • quarta-feira, 4 de novembro de 2009 12:11kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    No evento RowDataBound da GridView você pode fazer isso.

          if (e.Row.RowType == DataControlRowType.DataRow)
          {
              if(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "SeuCampo")).ToLower().Trim().Equals("valor"))         
              {
                 e.row.Cells[x].FindControl("seuComandField").EditImageUrl = "caminho"         
              }
          }
    • Marcado como RespostaDavi Nogueira quarta-feira, 4 de novembro de 2009 13:18
    •  
  • quarta-feira, 4 de novembro de 2009 13:17Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Funcionou assim:

    protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState != DataControlRowState.Edit)
            {
                DataRowView drv = (DataRowView)e.Row.DataItem;
    
                ImageButton editButton = e.Row.Cells[0].Controls[0] as ImageButton;
    
                if (editButton != null)
                {
                    if (Convert.ToString(drv["ID_STATUS"]).Equals("0"))
                    {
                        editButton.ImageUrl = "~/img/desativar.gif";
                        editButton.ToolTip = "Clique aqui para Ativar";
                    }
                    else
                    {
                        editButton.ToolTip = "Clique aqui para Desativar";
                    }
                }
            }
        }
    
    

    Valeu!!!

    Davi Nogueira
    • Marcado como RespostaDavi Nogueira quarta-feira, 4 de novembro de 2009 13:17
    •  

Todas as Respostas

  • terça-feira, 3 de novembro de 2009 15:50kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    O que significa "mais o de rowCommand nem chega no evento."

    Como assim ?

    Quando você aperta algum botão a sua Grid não executa esse método ? é isso ?

    Ou o código não está passando pela atribuição do método ao evento RowCommand ???

  • terça-feira, 3 de novembro de 2009 15:52Seilor Bonancio Junior Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    RowCommand somente vai funcionar se vc por algum evento em algum compente na grid, vc tem que por no commanName dele.
  • terça-feira, 3 de novembro de 2009 16:05Erysson Barros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Fale,

     

    Pois fala o que o Seilor diz

    http://www.macoratti.net/07/10/aspn_grc.htm

     

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
  • terça-feira, 3 de novembro de 2009 17:20Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Bom o meu método é esse:
    protected void CommonEventsGrid(GridView grid)
        {
            _grid = grid;
            grid.Sorting += new GridViewSortEventHandler(grid_Sorting);
            grid.PageIndexChanging += new GridViewPageEventHandler(grid_PageIndexChanging);
            grid.RowCommand += new GridViewCommandEventHandler(grid_RowCommand);      
        }
    
    Eu criei uma classe base, e minha página herda dessa classe. Se eu colocar o evento na mesma página, sem a herança, funciona como deve, mais se eu herdar daí não funciona.

    Esse método é chamado no Page_Load.
    Davi Nogueira
  • terça-feira, 3 de novembro de 2009 17:34kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Não esqueça do famoso "problema" dos controles criados dinamicamente.

    Em todos os PostBacks da página você deve recriar todas as suas propriedades. Nesse caso, atrelar novamente todos os eventos.

    http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/a14f0db0-ac39-4e68-8492-bb77b03b97a3/#controlesDinamicos 
  • terça-feira, 3 de novembro de 2009 18:20Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Tem alguma coisa a ver com o controle que dispara o evento estar dentro de um TemplateField?
    O controle que dispara o evento é um ImageButton, uso esse controle pois dependendo da situação tenho que alterar a imagem do botão.

    O estranho é que seu eu clicar no Header da coluna para fazer o sorting daí passa pelo meu metodo que dispara o RowCommand. E no caso eu gostaria que isso acontecesse no momento em que eu clicar na imagem. Essa imagem é de ativo e inativo, faço um update no banco e atualizo a imagem para a situação que esta o registro.

    Tem alguma outra forma de obter o mesmo resultado?


    Davi Nogueira
  • terça-feira, 3 de novembro de 2009 18:21Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Isso mesmo não executa o método.

    Davi Nogueira
  • quarta-feira, 4 de novembro de 2009 10:14Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Bom galera, usando o evento GridViewEditEventArgs eu até consegui fazer quase tudo o que eu queri, agora só não estou conseguindo setar dinamicamente o caminho para a propriedade EditImageUrl, onde conforme a situação do registro eu atribuo uma url diferente.
    Davi Nogueira
  • quarta-feira, 4 de novembro de 2009 12:05Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Na verdade o que eu estou precisando no momento é de setar dinamicamente o caminho para a propriedade EditImageUrl:

    <asp:CommandField ButtonType="Image" EditImageUrl="~/img/ativar.gif" ShowEditButton="true" HeaderText="Status" SortExpression="ID_STATUS" />
    

    Estou tentando fazer isso no DataBound da grid, mais não estou conseguindo.
    Tem alguma forma de fazer isso?

    Davi Nogueira
  • quarta-feira, 4 de novembro de 2009 12:11kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    No evento RowDataBound da GridView você pode fazer isso.

          if (e.Row.RowType == DataControlRowType.DataRow)
          {
              if(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "SeuCampo")).ToLower().Trim().Equals("valor"))         
              {
                 e.row.Cells[x].FindControl("seuComandField").EditImageUrl = "caminho"         
              }
          }
    • Marcado como RespostaDavi Nogueira quarta-feira, 4 de novembro de 2009 13:18
    •  
  • quarta-feira, 4 de novembro de 2009 13:17Davi Nogueira Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Funcionou assim:

    protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState != DataControlRowState.Edit)
            {
                DataRowView drv = (DataRowView)e.Row.DataItem;
    
                ImageButton editButton = e.Row.Cells[0].Controls[0] as ImageButton;
    
                if (editButton != null)
                {
                    if (Convert.ToString(drv["ID_STATUS"]).Equals("0"))
                    {
                        editButton.ImageUrl = "~/img/desativar.gif";
                        editButton.ToolTip = "Clique aqui para Ativar";
                    }
                    else
                    {
                        editButton.ToolTip = "Clique aqui para Desativar";
                    }
                }
            }
        }
    
    

    Valeu!!!

    Davi Nogueira
    • Marcado como RespostaDavi Nogueira quarta-feira, 4 de novembro de 2009 13:17
    •