SLIFE Posted April 22, 2009 at 06:09 PM Report #258331 Posted April 22, 2009 at 06:09 PM 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
passado Posted April 22, 2009 at 08:00 PM Report #258370 Posted April 22, 2009 at 08:00 PM http://www.macoratti.net/08/12/vbn_gdv2.htm ai existe um exemplo que te deve ajudar
SLIFE Posted April 23, 2009 at 06:17 AM Author Report #258446 Posted April 23, 2009 at 06:17 AM 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
jpaulino Posted April 23, 2009 at 07:18 AM Report #258447 Posted April 23, 2009 at 07:18 AM 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
Weasel Posted April 23, 2009 at 07:27 AM Report #258450 Posted April 23, 2009 at 07:27 AM 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
jpaulino Posted April 23, 2009 at 07:30 AM Report #258453 Posted April 23, 2009 at 07:30 AM @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).
Weasel Posted April 23, 2009 at 07:42 AM Report #258456 Posted April 23, 2009 at 07:42 AM Sim, não coloquei o Else para corrigir a coloração...isso seria para ele descobrir sozinho 😛 Knowledge to the masses
SLIFE Posted April 23, 2009 at 08:55 AM Author Report #258471 Posted April 23, 2009 at 08:55 AM 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
jpaulino Posted April 23, 2009 at 09:01 AM Report #258474 Posted April 23, 2009 at 09:01 AM Estás a ver os dados na coluna correcta ?
SLIFE Posted April 23, 2009 at 09:05 AM Author Report #258476 Posted April 23, 2009 at 09:05 AM 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
jpaulino Posted April 23, 2009 at 09:18 AM Report #258484 Posted April 23, 2009 at 09:18 AM Não tens nenhuma propriedade alterada ou não estás a formatar nada depois ?
Weasel Posted April 23, 2009 at 09:20 AM Report #258486 Posted April 23, 2009 at 09:20 AM 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
SLIFE Posted April 23, 2009 at 09:26 AM Author Report #258489 Posted April 23, 2009 at 09:26 AM 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
Weasel Posted April 23, 2009 at 09:27 AM Report #258490 Posted April 23, 2009 at 09:27 AM 1º preenches a datagridview, depois é que a pintas 😛 Knowledge to the masses
SLIFE Posted April 23, 2009 at 09:29 AM Author Report #258492 Posted April 23, 2009 at 09:29 AM 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
SLIFE Posted April 23, 2009 at 09:31 AM Author Report #258493 Posted April 23, 2009 at 09:31 AM 1º preenches a datagridview, depois é que a pintas 😛 E é isso que estou a fazer! Ve o codigo que postei! Sandro Coelho
SLIFE Posted April 23, 2009 at 09:40 AM Author Report #258497 Posted April 23, 2009 at 09:40 AM 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
Weasel Posted April 23, 2009 at 09:41 AM Report #258498 Posted April 23, 2009 at 09:41 AM Não tens na base de dados esse campo como integer? se sim muda para Double Knowledge to the masses
jpaulino Posted April 23, 2009 at 10:01 AM Report #258504 Posted April 23, 2009 at 10:01 AM 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.
SLIFE Posted April 23, 2009 at 10:45 AM Author Report #258536 Posted April 23, 2009 at 10:45 AM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now