none
Alterar cor do texto do datagridview de acordo com duas condições. RRS feed

  • Pergunta

  • Fala pessoal, estou tentando alterar a cor de linhas do datagridview apartir de duas condições. 

    nesse datagrid recebo os dados dos pedidos e posso ter varios pedidos acumulados(pra cada registro o numero é o mesmo desse campo) e outro campo com o valor total do pedido. o que estou tentando é colorir a linha que o valor seja menor.

    o if esta errado pois não estou sabendo como faze-lo. 

    Alguem pode me dar uma ajuda . 

    Att.Fabio.

     foreach (DataGridViewRow rows in this.dgPedAber.Rows)
                {
                    int PC = Convert.ToInt32((rows.Cells[8].Value.ToString()));
                    decimal vtp = Convert.ToDecimal((rows.Cells[14].Value.ToString()));
                    {
                        if (e.Value != null && e.Value.Equals("PENDENTE")) // aqui não estou sabendo como fazer.
                        {
                            dgPedAber.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Orange;
                        }
                    }
                }


    quarta-feira, 4 de maio de 2016 20:11

Respostas

  • Boa tarde,

    Fábio não consegui entender porque você compara o evento. Não deveria compara o registo da linha?
    Segue um exemplo abaixo, lembrando que não foi implementado a regra do valor porque não entendi sua lógica.

    foreach (DataGridViewRow rows in this.dgPedAber.Rows)
    {
        string TipoPC = row.Cells[6].Value.ToString();
        string TipoAe = row.Cells[5].Value.ToString();
        int PC = Convert.ToInt32((row.Cells[8].Value.ToString()));
        decimal vtp = Convert.ToDecimal((row.Cells[14].Value.ToString()));                
        if(TipoPc.Equals("TipoPC") && TipoAe.Equals("TipoAe")) 
        {
            rows.DefaultCellStyle.BackColor = Color.Orange;
        }
    }
    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Lailson Conceição quinta-feira, 5 de maio de 2016 19:52
    • Marcado como Resposta Marcos SJ sexta-feira, 6 de maio de 2016 13:20
    quinta-feira, 5 de maio de 2016 17:11

Todas as Respostas

  • Boa noite Fábio, blz? Amigo eu faria assim: Criaria uma variável do tipo String e no método que carrega o grid eu faria um foreach: (no meu caso de teste ficou assim e funcionou 100%)

    foreach (DataGridViewRow rows in this.dgvDados.Rows)
                {
                    teste = Convert.ToString(rows.Cells[1].Value.ToString());
                    if(teste == "Lailson Conceição das Virgens")
                        rows.Cells["nome"].Style.BackColor = Color.Yellow;
                }

    onde rows.Cells["nome"] seria o nome da coluna. No seu caso é só comparar por PENDENTE e todos que estiverem pendentes estarão com cores na célula.

    Se o meu código não lhe ajudou, tome como base para solucionar seu problema ou esclareça mais a sua dúvida... 

    Abraços.



    quarta-feira, 4 de maio de 2016 22:36
  • Boa noite,

    Fábio, você ja possui uma grid preenchida e a mesma pode ter linhas com registros iguais mas com valores diferentes e você gostaria de colorir as linhas exceto o maior valor. Seria isso? Algo parecido com o preenchimento da Grid com (Auto, N/I) onde ocultava as linhas ?

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    quarta-feira, 4 de maio de 2016 22:45
  • Oi Lailson, então. eu preciso alterar a cor da linha não pelo "Pendente" na verdade o cod do if esta ate com o comentario.  preciso testar duas condições a 1 é um inteiro e o 2 é um decimal a comparação seria:

    pedido1 | 01 | 01 | 239,90

    pedido2| 02 | 01 | 267,00

    pedido 3 | 03 | 01 | 229,00

    no exemplo acima tenho 3 pedidos o numero 01 da segunda coluna significa que esses 3 estão acumulados, ai preciso alterar a cor da linha que o tem o menor valor no caso pedido3 que o valor é 229,00.  

    essa logica dele comparar aonde na coluna 2 todos que sejam iguais marcar o com valor(coluna3) menor é que travou, não sei como fazer. 

    Att, Fabio.

    quarta-feira, 4 de maio de 2016 22:54
  • Oi silvaney, então tentei seguir aquela logica mas não esta dando certo. 

    não estou conseguindo realizar a comparação, quando coloco o break point vejo que TipoPC,TipoAe,PC e Vtp estão recebendo os dados certos com index tudo certinho.

    mas o if não rola é como se não houvesse comparação.

    Acredito que no if deveria ler todos os dados que que sejam iguais(TipoPC,TipoAe , PC e vtp )  guardar o index da linha que o valor(vtp) seja o menor e printar a linha. 

    a ideia é essa mas não estou conseguindo fazer.

                     string TipoPC = row.Cells[6].Value.ToString();
                     string TipoAe = row.Cells[5].Value.ToString();
                     int PC = Convert.ToInt32((row.Cells[8].Value.ToString()));
                     decimal vtp = Convert.ToDecimal((row.Cells[14].Value.ToString()));
                    {
                        if (e.Value != null && e.Value.Equals("TipoPC") && e.Value.Equals("TipoAe") 
                           && e.Value.Equals(PC)&& e.Value.Equals(<vtp)) // aqui não estou sabendo como fazer.
                        {
                            dgPedAber.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Orange;
                        }
                    }

    .Att, Fabio.

    quinta-feira, 5 de maio de 2016 16:21
  • Boa tarde,

    Fábio não consegui entender porque você compara o evento. Não deveria compara o registo da linha?
    Segue um exemplo abaixo, lembrando que não foi implementado a regra do valor porque não entendi sua lógica.

    foreach (DataGridViewRow rows in this.dgPedAber.Rows)
    {
        string TipoPC = row.Cells[6].Value.ToString();
        string TipoAe = row.Cells[5].Value.ToString();
        int PC = Convert.ToInt32((row.Cells[8].Value.ToString()));
        decimal vtp = Convert.ToDecimal((row.Cells[14].Value.ToString()));                
        if(TipoPc.Equals("TipoPC") && TipoAe.Equals("TipoAe")) 
        {
            rows.DefaultCellStyle.BackColor = Color.Orange;
        }
    }
    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Lailson Conceição quinta-feira, 5 de maio de 2016 19:52
    • Marcado como Resposta Marcos SJ sexta-feira, 6 de maio de 2016 13:20
    quinta-feira, 5 de maio de 2016 17:11