none
Cor informação datagrid RRS feed

  • Pergunta

  • Galera, tenho uma datagrid que esta com informações de um banco e eu gostaria de que se a informação da coluna 7 que esta no banco for  TITULAR a linha fica verde e se for SUBSTITUTA fica amarelo.

    No exemplo que achei ela ta ficando toda datagride em verde e eu so quero o lugar que esta Titular.

    MEU EXEMPLO:

    dataGridView1.DefaultCellStyle.BackColor = System.Drawing.Color.LightGreen;

    sábado, 3 de dezembro de 2016 18:40

Respostas

  • Olá,

    Eu faria da seguinte forma.

    Logo após carregar os dados (não sei como está adicionando as linhas nessa grid, porém após ter esses dados preenchidos na grid, eu chamaria um método criado por mim que fizesse tal verificação). Segue o código de exemplo abaixo. (Inseri duas linhas de teste antes de chamar o método apenas para exemplificar):

            private void CarregarDados()
            {
                dataGridView1.Rows.Add("TITULAR");
                dataGridView1.Rows.Add("SUBSTITUTA");
                FormatarGrid();
            }
    
            private void FormatarGrid()
            {
                foreach (DataGridViewRow r in dataGridView1.Rows)
                {
                    if (r.Cells["NomeColuna"].Value.ToString().ToUpper().Equals("TITULAR"))
                        r.Cells["NomeColuna"].Style.BackColor = System.Drawing.Color.LightGreen;
                    else if (r.Cells["NomeColuna"].Value.ToString().ToUpper().Equals("SUBSTITUTA"))
                        r.Cells["NomeColuna"].Style.BackColor = System.Drawing.Color.Yellow;
                }
            }

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Editado André SeccoMVP domingo, 4 de dezembro de 2016 13:45
    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:08
    domingo, 4 de dezembro de 2016 13:44

Todas as Respostas

  •    

    No evento CellFOrmatting do dataGrid, codifique:

         private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                if (dataGridView1["NomeColuna", e.RowIndex].Value == "TITULAR")
                {
                    e.CellStyle.ForeColor = Color.LightGreen;
                }
                else if (dataGridView1["NomeColuna", e.RowIndex].Value == "SUBSTITUTA")
                {
                    e.CellStyle.ForeColor = Color.Yellow;
                }
            }

    • Editado Paulo Sérgio Cotrim sábado, 3 de dezembro de 2016 20:45
    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:13
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:48
    sábado, 3 de dezembro de 2016 20:44
  • ta dando erro. No meu código tem a coluna que seria a coluna 7. Eu não adicionei as colunas na datagrid, ela ja mostra na datagrid as colunas com o nome que esta na tabela.


    sábado, 3 de dezembro de 2016 23:22
  • No Sql a coluna 7 chama-se Juiz? Se não coloque na frente do campo coloque "nomeDaColuna as Juiz" no sql
    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:48
    domingo, 4 de dezembro de 2016 11:35
  • O nome da coluna 7 esta Juiz. Por isso não estou entendendo o erro que esta dando. Saberia me dizer o que causando isso? 
    • Editado SouthNew domingo, 4 de dezembro de 2016 12:32
    domingo, 4 de dezembro de 2016 12:30
  • Tente colocar essa condição antes

    if (dataGridView1.Rows.Count > 0)

    {

       if (dataGridView1["NomeColuna", e.RowIndex].Value == "TITULAR")
                {
                    e.CellStyle.ForeColor = Color.LightGreen;
                }
                else if (dataGridView1["NomeColuna", e.RowIndex].Value == "SUBSTITUTA")
                {
                    e.CellStyle.ForeColor = Color.Yellow;
                }

    }

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:48
    domingo, 4 de dezembro de 2016 13:00
  • Continua com o mesmo erro.
    domingo, 4 de dezembro de 2016 13:33
  • Olá,

    Eu faria da seguinte forma.

    Logo após carregar os dados (não sei como está adicionando as linhas nessa grid, porém após ter esses dados preenchidos na grid, eu chamaria um método criado por mim que fizesse tal verificação). Segue o código de exemplo abaixo. (Inseri duas linhas de teste antes de chamar o método apenas para exemplificar):

            private void CarregarDados()
            {
                dataGridView1.Rows.Add("TITULAR");
                dataGridView1.Rows.Add("SUBSTITUTA");
                FormatarGrid();
            }
    
            private void FormatarGrid()
            {
                foreach (DataGridViewRow r in dataGridView1.Rows)
                {
                    if (r.Cells["NomeColuna"].Value.ToString().ToUpper().Equals("TITULAR"))
                        r.Cells["NomeColuna"].Style.BackColor = System.Drawing.Color.LightGreen;
                    else if (r.Cells["NomeColuna"].Value.ToString().ToUpper().Equals("SUBSTITUTA"))
                        r.Cells["NomeColuna"].Style.BackColor = System.Drawing.Color.Yellow;
                }
            }

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Editado André SeccoMVP domingo, 4 de dezembro de 2016 13:45
    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:08
    domingo, 4 de dezembro de 2016 13:44
  • Como comentei, após os métodos que vc carrega os dados no datagrid, chame o método que passei na resposta anterior, adaptando ele para a coluna que deseja formatar

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:47
    domingo, 4 de dezembro de 2016 18:59
  • Fiz isso na minha aplicação para quando o saldo bancário estive-se negativo, fica-se a linha em vermelho.

    Por último, tente assim:

     if (dataGridView1[7, e.RowIndex].Value.ToString() == "TITULAR")
                     {
                         e.CellStyle.ForeColor = System.Drawing.Color.LightGreen;
                     }
                     else if (dataGridView1[7, e.RowIndex].Value.ToString() == "SUBSTITUTA")
                     {
                         e.CellStyle.ForeColor = System.Drawing.Color.Yellow;
                     }
    

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:47
    domingo, 4 de dezembro de 2016 19:12
  • Não esta dando certo, continua em branco o campo. 

    Qual o local para chamar o metodo?

    Amigo, não sei se estou fazendo certo. Mas acho que vc esta falando que apos a inicialização da form3 onde eu coloco como deve ser a datagrid, tenho que adicionar o codigo que me passou. Correto? ficaria assim :

    public Form3()
            {
                caminho = "server=localhost; user id=root; pwd=root ;database=auditoria";
                conexao = new MySqlConnection(caminho);
                comando = new MySqlCommand();
                comando.Connection = conexao;
    
                InitializeComponent();
    
                txtnomeconsulta.Enabled = false;
                txtprocconsulta.Enabled = false;
                dateConsulta1.Enabled = false;
                dateconsulta2.Enabled = false;
                cboJuiz.Enabled = false;
    
                exibir();
    
                dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[4].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[5].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[6].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[7].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[0].Visible = false;
    
                foreach (DataGridViewColumn col in dataGridView1.Columns)
                {
                    col.HeaderCell.Style.Font = new System.Drawing.Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Pixel);
                }
    
    
    
            }
    
            private void FormatarGrid()
            {
                foreach (DataGridViewRow r in dataGridView1.Rows)
                {
                    if (r.Cells["Juiz"].Value.ToString().ToUpper().Equals("TITULAR"))
                        r.Cells["Juiz"].Style.BackColor = System.Drawing.Color.LightGreen;
                    else if (r.Cells["Juiz"].Value.ToString().ToUpper().Equals("SUBSTITUTA"))
                        r.Cells["Juiz"].Style.BackColor = System.Drawing.Color.Yellow;
                }
            }



    • Editado SouthNew domingo, 4 de dezembro de 2016 19:28
    domingo, 4 de dezembro de 2016 19:21
  • Adicione a seguinte linha após a chamada do exibir()

     FormatarGrid();


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:47
    domingo, 4 de dezembro de 2016 22:12
  • ta dando erro

    domingo, 4 de dezembro de 2016 22:52
  • Cara, precisa debugar isso aí.

    Tem que ver se antes de passar desse ponto que dá erro, se já existe linhas e se a datagrid já está carregada.

    Como mencionei anteriormente, é preciso chamar esse método quando a datagrid estiver preenchida. O que você precisa analisar no seu código é em que ponto ela está "pronta" para receber a formatação.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:47
    domingo, 4 de dezembro de 2016 23:16
  • Eu Debuguei o programa e adicionei o método a um botão da form. ja com todos os campos da grid carregados. Continua dando o mesmo erro da imagem anterior
    domingo, 4 de dezembro de 2016 23:43
  • Se você tem Certeza que os dados estão carregados, então não existe uma coluna com o nome Juiz.

    Cuidado! O nome da Coluna (Propriedade Name) não é o mesmo que o texto do cabeçalho dela.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:47
    segunda-feira, 5 de dezembro de 2016 00:49
  • Pronto entendi. Então como eu faço para colocar PropriedadeName na coluna?

    O datagrid que eu tenho já pega as informações que estão na tabela e coloca como cabeçalho.

    segunda-feira, 5 de dezembro de 2016 10:17
  • Nesse caso ficaria mais fácil informar a posição da coluna. Por exemplo, se for a 3º coluna da grid, informa assim:

    r.Cells[2]

    É 2 pois a contagem começa em 0.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:12
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:47
    segunda-feira, 5 de dezembro de 2016 10:41
  • A coluna que quer não é Juiz? Então é 8 né!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:11
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:46
    segunda-feira, 5 de dezembro de 2016 11:28
  • Isso correto, coluna 8. Eu corrigir. Continua dando erro.
    • Editado SouthNew segunda-feira, 5 de dezembro de 2016 11:34
    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:11
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:46
    segunda-feira, 5 de dezembro de 2016 11:33
  • Então é certeza que a propriedade Value dessa coluna (em alguma linha) não possui dados.

    Como falei anteriormente, debugue e veja se essa propriedade tem valor ou é null. Verifique tudo, acompanhe a excecução, foreach, etc, etc.

    Tenho um vídeo no canal mostrando como faz o debug: https://www.youtube.com/watch?v=DurxzcJ37x8


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:11
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:46
    segunda-feira, 5 de dezembro de 2016 11:46
  • Uma duvida. 

    Como eu falei anterior mente. quando eu coloco o método formatargrid em Butão, apos toda pagina inicial ter carregado com as informações da grid mostrando ao usuario. Ele não teria que pintar as cedula? 

    segunda-feira, 5 de dezembro de 2016 11:55
  • Se todo seu código estiver correto sim (Esse seria o comportamento esperado). Mas como não está ocorrendo precisa investigar e o melhor meio de fazer isso é debugar a aplicação.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:11
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:46
    segunda-feira, 5 de dezembro de 2016 12:00
  • Vou da uma verificada no meu Código. Gostaria de agradecer por todas as sua ajudas.
    segunda-feira, 5 de dezembro de 2016 12:07
  • Estamos aí para ajudar!

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 12:14
    • Não Marcado como Resposta SouthNew segunda-feira, 5 de dezembro de 2016 13:45
    segunda-feira, 5 de dezembro de 2016 12:11
  • Só lembrando, basta marcar apenas a solução do seu problema como resposta.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 5 de dezembro de 2016 13:25