Jump to content

Recommended Posts

Posted

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®

Sandro Coelho

Posted

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.

Sandro Coelho

Posted

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
Posted

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 😛

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

Knowledge to the masses


Posted

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?

Sandro Coelho

Posted

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!

Sandro Coelho

Posted

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

Knowledge to the masses


Posted

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?

Sandro Coelho

Posted

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

Sandro Coelho

Posted

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! 😛

Sandro Coelho

Posted

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.

Posted

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!

Sandro Coelho

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.