Formattazione condizionale di DataGridView

giovedì 07 aprile 2011 - 13.41

shibuya Profilo | Newbie

Ciao a tutti,

ho una form con un controllo DataGridView che all'avvio viene popolato con i dati di una tabella SQLite.
Quel che vorrei ottenere è impostare il colore di sfondo delle righe del DataGridView a seconda del contenuto di un campo della riga.
Spiego meglio, la tabella è di questo tipo:

NOME COGNOME STATO
------ ------------- --------
Numa Pompilio 1
Tullio Ostilio 2
Anco Marzio 2

nel controllo DGV nascondo la colonna STATO e la uso solo per formattare il colore della riga corrispondente, rendendo le righe in stato = 1 verdi e quelle in stato 2 rosse.
Per ottenere ciò, nell'evento SelectionChanged del DGV ho messo:

foreach (DataGridViewRow dr in dgv.Rows)
{
switch (int.Parse(dr.Cells[0].Value.ToString()))
{
case 1:
dr.DefaultCellStyle.BackColor = Color.Green;
break;
case 2:
dr.DefaultCellStyle.BackColor = Color.Red;
break;
}
}

All'avvio le righe sono rese tutte dello stesso colore (il verde, nell'esempio sopra), poi al primo click su una qualsiasi altra riga viene rieffettuata la formattazione e questa volta in modo corretto.
Qualcuno saprebbe spiegarmi il perché di tale funzionamento?

Ho anche provato a spostare quel blocco di codice dall'evento SelectionChanged subito dopo l'assegnazione del datasource al DataGridView, ma ottenendo lo stesso risultato.

Grazie
-------------
L.C.

alexmed Profilo | Guru

Ciao
Spero di aver capito.

Usa l'evento DataGridView1_CellFormatting e metti questo codice
è in VB ma dovresti riuscire a tradurlo facilmente

If Me.DataGridView1.Columns(e.ColumnIndex).Name = "STATO" Then If e.Value = 1 Then Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Green Else Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red End If End If


Ciao

alexmed

shibuya Profilo | Newbie

Ciao, grazie per la risposta. Chiedo scusa ma avevo sbagliato a scrivere prima.

Intendevo in effetti dire che avevo messo il codice sotto l'evento CellFormatting (come giustamente mi suggerisci) e per prova, visto che già così mi dava lo stesso problema, lo avevo spostato sotto SelectionChanged e replicato subito dopo l'assegnazione del Datasource.


-------------
L.C.

GIANNI_inside Profilo | Newbie

Ciao a tutti, anche io vorrei ottenere lo stesso risultato ma non lo ottengo. Ho una datagridview popolata con database sql. campi:
nome cognome stato
aaa bbb 1
ccc ddd 0
ho inserito il codice postato:
Private Sub datiDataGridView_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles datiDataGridView.CellFormatting
If Me.datiDataGridView.Columns(e.ColumnIndex).Name = "Stato" Then
If e.Value = 1 Then
Me.datiDataGridView.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Green
Else
Me.datiDataGridView.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
End If
End If
End Sub
non succede nulla...visual studio 2010.

Un aiutino? grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5