Usuário com melhor resposta
CheckBox volta sempre nulo com o FindControl

Pergunta
-
Bom dia, Pessoal.
Beleza?
Estou com um problema muito chato HAHA, já tentei de tudo.
Seguinte, eu tenho um Grid e adicionei um TemplateField nesse grid com um CheckBox.
<asp:TemplateField> <HeaderTemplate> OK_MF </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="cbOKMF" runat="server" CommandArgument='<%# Eval("Ok_MF")%>' OnCheckedChanged="cbOKMF_CheckedChanged" /> </ItemTemplate> </asp:TemplateField>
E preciso pegar esse CheckBox, através do código, utilizando o FindControl.
CheckBox cbOKMF = (CheckBox)e.Row.FindControl("cbOKMF");
O problema é que ele SEMPRE ME RETORNA NULO =///
Já até tentei colocar um ImageButton, mudei os controles, coloquei um Input também e nada, tudo me retorna nulo.
Estou perdido, realmente não sei mais o que fazer.
Alguém pode me ajudar, por favor?
Agradeço desde já.
Att.
Respostas
-
Dá uma lida neste artigo e veja se vc tem uma luz:
http://nycolasbarrel.blogspot.com.br/2011/04/durante-o-desenvolvimento-de-seus.html
- Marcado como Resposta Progamador.C terça-feira, 29 de maio de 2012 17:09
-
Nossa, Murillo.
Me salvou cara, pqp.
Consegui, ficou perfeito.
Segue meu código:
public void PesquisarEquipamentos(object e, EventArgs sender) { CarregaGrid(); for (int i = 0; i <= grdPesquisa.Rows.Count - 1; i++) { GridViewRow dgItem = grdPesquisa.Rows[i]; CheckBox cb = (CheckBox)dgItem.FindControl("cbOKMF"); Label lblStatus = (Label)dgItem.FindControl("lblStatus"); if (lblStatus.Text == "S") { cb.Checked = true; } else { cb.Checked = false; } } }
Valeu mesmo, cara.
- Marcado como Resposta Progamador.C terça-feira, 29 de maio de 2012 17:09
Todas as Respostas
-
-
-
-
Pessoal, acho que eu sei o que pode ser.
O método do DataBound está acontecendo antes do meu Grid carregar, ou seja, ele não encontra mesmo nenhum CheckBox.
Eu só chamo o meu método de CarregarGrid quando o usuário clica no botão PESQUISAR, que ai sim o meu grid é carregado.
Mas o DataBound executa antes, como posso mudar isso?
-
-
Vou explicar melhor tudo que eu preciso fazer.
Seguinte, tenho na minha página um Grid, com alguns campos de busca e um botão pesquisar.
Ao entrar na minha página, eu coloquei propositavelmente para o Grid não carregar, só carregar depois do usuário preencher algum campo de pesquisa e clicar no botão Pesquisar. O problema está ai, quando preencho algum campo e pressiono o botão pesquisar, o meu projeto entra primeiro no DataBound e depois cai no CarregarGrid. Debugando, eu pulei a primeira vez que ele passa pelo DataBound e na segunda já funciona, faz tudo direitinho.
O problema é na 1º vez mesmo.
No meu load está assim:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { CarregaComboTipo(); } }
Ai eu chamo meu CarregarGrid no click do botão:
public void PesquisarEquipamentos(object e, EventArgs sender) { CarregaGrid(); }
Ai o meu databound é chamado antes do carregar grid:
protected void grdPesquisa_RowDataBound(object sender, GridViewRowEventArgs e) { CheckBox cbOKMF = (CheckBox)e.Row.FindControl("cbOKMF"); string valorMF = DataBinder.Eval(e.Row.DataItem, "Ok_MF").ToString(); if (valorMF == "S") { cbOKMF.Checked = true; } else { cbOKMF.Checked = false; } }
-
-
Cara, eu fiz isso e não funcionou =/
Voltou nulo mesmo assim na 1º vez.
Percebi uma coisa agora, coloquei BreakPoint no Click do botão (que chama o CarregarGrid) e coloquei outro no DataBound.
Cai primeiro no click do botão, ou seja, o Grid carrega antes do DataBound, mas mesmo assim no DataBound, o checkbox retorna nulo.
PQP.
-
Dá uma lida neste artigo e veja se vc tem uma luz:
http://nycolasbarrel.blogspot.com.br/2011/04/durante-o-desenvolvimento-de-seus.html
- Marcado como Resposta Progamador.C terça-feira, 29 de maio de 2012 17:09
-
Nossa, Murillo.
Me salvou cara, pqp.
Consegui, ficou perfeito.
Segue meu código:
public void PesquisarEquipamentos(object e, EventArgs sender) { CarregaGrid(); for (int i = 0; i <= grdPesquisa.Rows.Count - 1; i++) { GridViewRow dgItem = grdPesquisa.Rows[i]; CheckBox cb = (CheckBox)dgItem.FindControl("cbOKMF"); Label lblStatus = (Label)dgItem.FindControl("lblStatus"); if (lblStatus.Text == "S") { cb.Checked = true; } else { cb.Checked = false; } } }
Valeu mesmo, cara.
- Marcado como Resposta Progamador.C terça-feira, 29 de maio de 2012 17:09
-