none
Pintar linha do Grid não funciona. RRS feed

  • Pergunta

  • Boa Tarde, Pessoa.

    Beleza?

    Estou tentando pintar as linhas de meu gridview de acordo com algumas condições.

    Mas depois que dou o DataBind() ele zera o que eu mandei pintar e não funciona.

    É muito simples isso, eu sei, mas não estou conseguindo, tem algo de errado, podem me ajudar?

    Segue o código:

    if (lstValorres[j].Split(new char[] { '|' })[0].Equals(GridViewMedicoes.Rows[i].Cells[1].Text))
                        {
                            GridViewMedicoes.Rows[i].ForeColor = Color.Red;                        
                            GridViewMedicoes.Rows[i].Font.Bold = true;
                            GridViewMedicoes.DataBind();
                            // Verifica se o usuário setou para não calcular o CP/CPK
                            if (lstValorres[j].Split(new char[] { '|' })[1] == "Sim")
                            {
                                GridViewMedicoes.Rows[i].Cells[7].Text = "1";
                                GridViewMedicoes.DataBind();
                            }
                        }

    Já tentei de tudo, pintei com CSS e nada, sabem o que posso fazer?

    Obrigado,

    Att.

    terça-feira, 15 de maio de 2012 16:42

Respostas

  • Você esta fazendo isso no RowDataBound? Veja se não pdoeria ser assim:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
          if(e.Row.RowIndex == 2)
             e.Row.ForeColor = Color.Red;   
       }
    }

    Neste caso ficaria assim:


    Rodrigo Reis Ferreira
    Microsoft Certified

    terça-feira, 15 de maio de 2012 19:38
  • Resolvido:

    if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    for (int i = 0; i < GridViewOcorrencia.Rows.Count; i++)
                    {
                        if (e.Row.Cells[1].Text == GridViewOcorrencia.Rows[i].Cells[2].Text)
                        {
                            e.Row.ForeColor = Color.Red;
                            e.Row.Font.Bold = true;
                            if (GridViewOcorrencia.Rows[i].Cells[5].Text == "Sim")
                            {
                                e.Row.Cells[7].Text = "1";                             
                            }
                            break;
                        }
                    }
                }

    • Marcado como Resposta Progamador.C quarta-feira, 16 de maio de 2012 14:38
    quarta-feira, 16 de maio de 2012 14:38

Todas as Respostas

  • Engraçado, quando eu passo:

    GridViewMedicoes.RowStyle.ForeColor = Color.Red;

    Dessa forma mesmo com o DataBind() ele pinta todas as linhas, mas não funciona quando eu passo o Index da linha que eu quero pintar o.o

    Alguém sabe o porque?

    terça-feira, 15 de maio de 2012 16:50
  • Você esta fazendo isso no RowDataBound? Veja se não pdoeria ser assim:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
          if(e.Row.RowIndex == 2)
             e.Row.ForeColor = Color.Red;   
       }
    }

    Neste caso ficaria assim:


    Rodrigo Reis Ferreira
    Microsoft Certified

    terça-feira, 15 de maio de 2012 19:38
  • Na verdade não, eu tenho um método específico pra isso.

    Não tem como pintar as linhas sem ser no DataBound?

    Eu não posso mudar a regra, teria que ficar assim, agora se não tiver jeito, eu mudo pro DataBound mesmo...

    quarta-feira, 16 de maio de 2012 11:58
  • Consegui fazer no DataBound, funcionou, porém, funcionou em alguns Grid's só.

    Eu tenho um Dropdown que refina minha pesquisa, é como se mudasse os grids, mas tudo na mesma página, ai eu fiz um for dessa forma:

    if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    for (int j = 0; j < GridViewMedicoes.Rows.Count; j++)
                    {
                        for (int i = 0; i < GridViewOcorrencia.Rows.Count; i++)
                        {
                            if (e.Row.Cells[1].Text == GridViewOcorrencia.Rows[i].Cells[2].Text)
                            {
                                e.Row.ForeColor = Color.Red;
                                e.Row.Font.Bold = true;
                            }
                        }      
                    }                         
                }

    E ele não funciona muito bem, alguns grid's ele pinta direitinho, mas outros não.

    Minha lógica do for está errada?

    quarta-feira, 16 de maio de 2012 12:30
  • Resolvido:

    if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    for (int i = 0; i < GridViewOcorrencia.Rows.Count; i++)
                    {
                        if (e.Row.Cells[1].Text == GridViewOcorrencia.Rows[i].Cells[2].Text)
                        {
                            e.Row.ForeColor = Color.Red;
                            e.Row.Font.Bold = true;
                            if (GridViewOcorrencia.Rows[i].Cells[5].Text == "Sim")
                            {
                                e.Row.Cells[7].Text = "1";                             
                            }
                            break;
                        }
                    }
                }

    • Marcado como Resposta Progamador.C quarta-feira, 16 de maio de 2012 14:38
    quarta-feira, 16 de maio de 2012 14:38
  • Que bom que deu certo. Sucesso ai! :)

    Rodrigo Reis Ferreira
    Microsoft Certified

    quarta-feira, 16 de maio de 2012 16:58