• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

SLIFE

Formatar DataGriedView

26 mensagens neste tópico

Boas

Estou com um problema!

Tenho uma DataGridView e queria fazer uma selecção dos dados de uma determinada coluna, para se caso fossem <6,50, então esse valor aparecia na célula mas com as letras a vermelho!

Tenho este código:

Private Sub CorCelula()

    
        Dim cor As New DataGridViewCellStyle()
        cor.BackColor = Color.White
        cor.ForeColor = Color.Red

        For reg As Integer = 0 To ds.Tables(0).Rows.Count - 1
            If ds.Tables(0).Rows(reg).Item("Valor") < 6,50 Then
                DataGridView1.Item(2, reg).Style = cor
            End If
        Next reg
    End Sub

Mas não está a funcionar!

Ele passa por todos os registo da coluna e faz a verificação!

Mas depois não me está a alterar a cor daqueles que tem um valor mais baixo de 6,50.

Será que tenho que activar alguma coisa nas propriedades da datagridview??

O que estou a fazer de errado?

Obrigado

Cpts

SLIFE®

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

http://www.macoratti.net/08/12/vbn_gdv2.htm ai existe um exemplo que te deve ajudar

Boas

Obrigado!

Mas esse exemplo é idêntico ao meu código!

A única diferença e que no exemplo não estão a usar base de dados!

Mas, sim dados tipados!

E eu estou a usar base de dados!

No exemplo parece que funciona! mas ja experimentei e não estou a conseguir!

Não colocar nada na gridview!

Obrigado Na mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta lá assim:

        For Each row As DataGridViewRow In Me.DataGridView1.Rows
            If Not row.IsNewRow Then
                If row.Cells(2).Value < 6.5 Then
                    row.Cells(2).Style.ForeColor = Color.Red
                Else
                    row.Cells(2).Style.ForeColor = Color.Black
                End If
            End If
        Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta assim:

Private Sub CorCelula()

 

        Dim cor As New DataGridViewCellStyle()

        cor.BackColor = Color.White

        cor.ForeColor = Color.Red

     

        For Each r As DataGridViewRow In DataGridView1.Rows

            If r.Cells.Item(0).Value < 6,5 Then

                r.Cells.Item(0).Style = cor

            End If

        Next

    End Sub

Confirma se é 6,5 ou 6.5 :P

EDIT: Enquanto escrevia isto o jpaulino submeteu a solução dele...fica esta tb já que a escrevi...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Weasel,

só há um problema com a tua solução ... se ele mudar o número não coloca a forecolor a preto (ou a cor por defeito).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, não coloquei o Else para corrigir a coloração...isso seria para ele descobrir sozinho :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta lá assim:

        For Each row As DataGridViewRow In Me.DataGridView1.Rows
            If Not row.IsNewRow Then
                If row.Cells(2).Value < 6.5 Then
                    row.Cells(2).Style.ForeColor = Color.Red
                Else
                    row.Cells(2).Style.ForeColor = Color.Black
                End If
            End If
        Next

Boas jpaulino

Experimentei como dizes mas continua a nao colocar os valores inferiores a 6.5 a vermelho!

Experimentei tambem como o exemplo do Weasel mas tambem nao esta a funcionar!

Nao tenho que alterar nenhuma propriedade na Grid??

Estou a achar isto muito estranho pois ele passa pelo codigo e faz o next, mas nao atera a cor da letra!

Tens mais alguma sugestao?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a ver os dados na coluna correcta ?

Sim!

Ate porque tenho diversas colunas!

Mas Todas elas tem valores!

No meu caso é a coluna 11. Que ate ja tirei a formatação que tinha adicionado a celula para ver se era disso!

Mas nao!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tens nenhuma propriedade alterada ou não estás a formatar nada depois ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para testar...supostamente irá pintar tudo

Private Sub CorCelula()

  Dim cor As New DataGridViewCellStyle()

  cor.BackColor = Color.White

  cor.ForeColor = Color.Red

  For Each r As DataGridViewRow In DataGridView1.Rows

    For Each c As DataGridViewCell In r.Cells

        c.Style = cor

    Next

  Next

End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tens nenhuma propriedade alterada ou não estás a formatar nada depois ?

Agora descubri que so coloca os valores depois de eu inserir dados!

Isto e quando abro o form ele vai ao procedimento exibedados mas nao coloca as cores nas celulas!

Depois de inserir um registo ele chama novamente o procedimento de exibedados e ai ja coloca as cores!

Experimentei colocar apenas um botao onde ao clicar chama apenas o procedimento exibe dados e funciona!

Apenas nao funciona quando ele abre o form!

O que é estranho nao?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O codigo que tenho no Sub é este:

Public Sub ExibeDados()
        Try
            Dim Conexao As New OleDbConnection 'Declara um objeto conexao para conectar ao banco de dados
            Conexao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\BD.mdb" 'Cria uma string de conexão informando o caminho do banco de dados
            Dim comando As New OleDbCommand 'cria um objeto comando que vai receber uma consulta sql

            comando.Connection = Conexao 'informa qual a conexão de banco de dados a consulta sql será realizada
            comando.CommandText = "Select * FROM Assistencias ORDER BY DataAssistencia ASC"


            Dim adapter As New OleDbDataAdapter(comando) 'cria um objeto dataadpater que é o responsavel por executar a consulta sql

            Dim ds As New DataSet 'cria um objeto dataset que é responsavel por receber os dados da consulta SQL

            adapter.Fill(ds, "Assistencias") 'preenche o data set com o resultado da consulta SQL na tabela Nomes

            Me.DataGridView1.DataSource = ds 'informa qual a fonte de dados da gridview 
            Me.DataGridView1.DataMember = "Assistencias" ' qual a tabela que será visualizada na grid
            Me.DataGridView1.RowHeadersVisible = False

            Me.DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray

            Me.DataGridView1.Columns(1).HeaderText = "Data Assistência"
            Me.DataGridView1.Columns(2).HeaderText = "Lojas Visitadas"
            Me.DataGridView1.Columns(5).HeaderText = "Total Kms"
            Me.DataGridView1.Columns(9).HeaderText = "V. Almoço"
            Me.DataGridView1.Columns(11).HeaderText = "V. Jantar"
            Me.DataGridView1.Columns(13).HeaderText = "V. Estadia"
            Me.DataGridView1.Columns(15).HeaderText = "V. Outros"
            Me.DataGridView1.Columns(16).HeaderText = "Total Despesas"
            Me.DataGridView1.Columns(17).HeaderText = "Tecnico"

            Me.DataGridView1.Columns(1).Width = 150
            Me.DataGridView1.Columns(2).Width = 200
            Me.DataGridView1.Columns(16).Width = 150

            Me.DataGridView1.Columns(9).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(11).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(13).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(15).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(16).DefaultCellStyle.Format = "0.00 €"

            Me.DataGridView1.Columns(5).DefaultCellStyle.Format = "0 Kms"

            Me.DataGridView1.Columns(0).Visible = False
            Me.DataGridView1.Columns(3).Visible = False
            Me.DataGridView1.Columns(4).Visible = False
            Me.DataGridView1.Columns(6).Visible = False
            Me.DataGridView1.Columns(7).Visible = False
            Me.DataGridView1.Columns(8).Visible = False
            Me.DataGridView1.Columns(10).Visible = False
            Me.DataGridView1.Columns(12).Visible = False
            Me.DataGridView1.Columns(14).Visible = False
            LblTotalRegistos.Text = Me.DataGridView1.RowCount


            Me.DataGridView1.Refresh()
            CorCelula()

        Catch ex As Exception
            MsgBox("Erro:" & ex.Message)

        End Try
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1º preenches a datagridview, depois é que a pintas :P

E é isso que estou a fazer!

Ve o codigo que postei!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outro problema que estou a ter é quando coloco o valor de 6,5.

Ele grava o registo, mas coloca apenas na base de dados o valor de 6!

Esta a fazer arredondamentos!

Cada vez percebo menos disto! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tens na base de dados esse campo como integer? se sim muda para Double

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cria um exemplo simples e experimenta o codigo que te mostramos ... funciona bem.

Mais uma vez verifica se a coluna é a certa. A coluna 11 corresponde ao index 10. Coloca um breakpoint ou uma msgbox e confirma isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cria um exemplo simples e experimenta o codigo que te mostramos ... funciona bem.

Mais uma vez verifica se a coluna é a certa. A coluna 11 corresponde ao index 10. Coloca um breakpoint ou uma msgbox e confirma isso.

Mas jpaulino isto esta  a funcionar!

Apenas nao percebo o porque de nao o fazer quando preenche a datagrid pela primeira vez!

depois se clicar logo no botao que adicionei para testar funciona logo!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mostra o código como tens agora...

Tenho Isto:

Public Sub ExibeDados()
        Try
            Dim Conexao As New OleDbConnection 'Declara um objeto conexao para conectar ao banco de dados
            Conexao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\BD.mdb" 'Cria uma string de conexão informando o caminho do banco de dados
            Dim comando As New OleDbCommand 'cria um objeto comando que vai receber uma consulta sql

            comando.Connection = Conexao 'informa qual a conexão de banco de dados a consulta sql será realizada
            comando.CommandText = "Select * FROM Assistencias ORDER BY DataAssistencia ASC"


            Dim adapter As New OleDbDataAdapter(comando) 'cria um objeto dataadpater que é o responsavel por executar a consulta sql

            Dim ds As New DataSet 'cria um objeto dataset que é responsavel por receber os dados da consulta SQL

            adapter.Fill(ds, "Assistencias") 'preenche o data set com o resultado da consulta SQL na tabela Nomes

            Me.DataGridView1.DataSource = ds 'informa qual a fonte de dados da gridview 
            Me.DataGridView1.DataMember = "Assistencias" ' qual a tabela que será visualizada na grid
            Me.DataGridView1.RowHeadersVisible = False

            Me.DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray

            Me.DataGridView1.Columns(1).HeaderText = "Data Assistência"
            Me.DataGridView1.Columns(2).HeaderText = "Lojas Visitadas"
            Me.DataGridView1.Columns(5).HeaderText = "Total Kms"
            Me.DataGridView1.Columns(9).HeaderText = "V. Almoço"
            Me.DataGridView1.Columns(11).HeaderText = "V. Jantar"
            Me.DataGridView1.Columns(13).HeaderText = "V. Estadia"
            Me.DataGridView1.Columns(15).HeaderText = "V. Outros"
            Me.DataGridView1.Columns(16).HeaderText = "Total Despesas"
            Me.DataGridView1.Columns(17).HeaderText = "Tecnico"

            Me.DataGridView1.Columns(1).Width = 150
            Me.DataGridView1.Columns(2).Width = 200
            Me.DataGridView1.Columns(16).Width = 150

            Me.DataGridView1.Columns(9).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(11).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(13).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(15).DefaultCellStyle.Format = "0.00 €"
            Me.DataGridView1.Columns(16).DefaultCellStyle.Format = "0.00 €"

            Me.DataGridView1.Columns(5).DefaultCellStyle.Format = "0 Kms"

            Me.DataGridView1.Columns(0).Visible = False
            Me.DataGridView1.Columns(3).Visible = False
            Me.DataGridView1.Columns(4).Visible = False
            Me.DataGridView1.Columns(6).Visible = False
            Me.DataGridView1.Columns(7).Visible = False
            Me.DataGridView1.Columns(8).Visible = False
            Me.DataGridView1.Columns(10).Visible = False
            Me.DataGridView1.Columns(12).Visible = False
            Me.DataGridView1.Columns(14).Visible = False
            LblTotalRegistos.Text = Me.DataGridView1.RowCount


            Me.DataGridView1.Refresh()
            CorCelula()

        Catch ex As Exception
            MsgBox("Erro:" & ex.Message)

        End Try
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É um tiro no escuro mas, experimenta meter o CorCelula() fora do Try, ou seja depois do End Try

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É um tiro no escuro mas, experimenta meter o CorCelula() fora do Try, ou seja depois do End Try

Boas

Não, mesmo assim nao funciona!

Coloquei como dizes e nao faz nada!

Curioso e apenas estar a dar tudo bem, se clicar no botao que falei a pouco!

Que a unica coisa que tem e chamar o procedimento do codigo acima que te escrevi!

Ao clicar no botao funciona 5 estrelas!

Ao entrar no form e chamar o procedimento no form load nao funciona!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora