2010-08-04 17 views
6

Ciao Ho ottenuto un DatagridView e vorrei cambiare il colore di sfondo in base ai dati di ogni riga.Aggiornamento cella DataGridView Colore di sfondo in base ai dati di riga

Es.

| Persona 1 | Persona 2 | Persona 3 |

| ---- 100 ---- | --- 200 ----- | ----- 150 ---- |

| ---- 300 ---- | --- 100 ----- | ------ 50 ---- |

Nella prima riga mi piacerebbe che "100" avesse un colore di sfondo rosso e verde "200". Or. Il valore più basso = rosso più alto = verde

Ora il fatto è che sto usando un BindingList per i miei dati, e che è stato aggiornato asincrono con INotifyPropertyChanged. Quindi ho bisogno di un modo per controllare ogni volta che uno dei valori è stato aggiornato.

Do DataGridView ha qualche evento che sarebbe utile?

risposta

9

Sottoclasse DataGridView e override OnCellFormating(), qui è possibile ispezionare il valore della cella e impostare i colori in modo appropriato.

Per quanto riguarda i commenti seguenti sull'utilizzo dell'evento corrispondente, sì, è possibile farlo ma il metodo virtuale ha prestazioni e sottoclassi migliori. DataGridView incapsula tutto il comportamento della griglia in un unico punto.

+0

CellFormatting è un evento quindi non è necessario sottoclasse, è sufficiente iscriversi all'evento. Entrambi raggiungono la stessa cosa. – Tergiver

+0

Thx, l'evento OnCellFormatting sembra promettente. Appena fatto un piccolo test vuoto prisListeView_CellFormatting privato (object sender, DataGridViewCellFormattingEventArgs e) { se (e.Value! = Null) se (e.ColumnIndex == 3 && (decimale) e.Value> 0) { e.CellStyle.BackColor = Color.DodgerBlue; } } Ma come posso cambiare lo stile per le altre celle? Ex. Nella colonna precedente 3 sono cambiati. Come cambio quindi lo stile per le altre celle? – gulbaek

+0

Non sono sicuro circa le prestazioni in questa soluzione, ma funziona :-) E se qualcuno ha bisogno di sapere come modificare le cellule altri stili, ecco il codice datagridview1.Rows [e.RowIndex] [.Cells "myColumn"]. Style.BackColor = Color.DeepPink; – gulbaek

1

Non sono sicuro che questa sia la soluzione ottimale, ma spero che aiuti: registrare l'evento PropertyChanged per ogni elemento di origine dati nella vista datagrid. Nel gestore di eventi, è possibile eseguire l'azione richiesta in base ai valori modificati.
Se si utilizza un elenco di binding per l'origine dati, registrarsi a ListChanged per gestire nuovi elementi.

Problemi correlati