Microsoft Developer Network >
Página Inicial dos Fóruns
>
Fóruns do Web Development
>
ASP .NET
>
GridView - Registrar eventos
GridView - Registrar eventos
- 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
- 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
- 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
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 ???- RowCommand somente vai funcionar se vc por algum evento em algum compente na grid, vc tem que por no commanName dele.
- EditadoSeilor Bonancio Junior terça-feira, 3 de novembro de 2009 15:52ok
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!- Bom o meu método é esse:
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.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); }
Esse método é chamado no Page_Load.
Davi Nogueira - 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 - 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 - Isso mesmo não executa o método.
Davi Nogueira - 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 - 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 - 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
- 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

