2010-08-04 29 views
6

Hallo Ich habe eine DatagridView und ich möchte es Hintergrundfarbe abhängig von den Daten in jeder Zeile ändern.Update DatagridView Cell Hintergrundfarbe basierend auf Zeilendaten

Ex.

| Person 1 | Person 2 | Person 3 |

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

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

In der ersten Zeile möchte ich, dass "100" eine rote Hintergrundfarbe hat und "200" grün. Or. Der niedrigste Wert = rot höchste = grün

Nun ist die Sache, dass ich eine BindingList für meine Daten verwende, und es wird async mit INotifyPropertyChanged aktualisiert. Also muss ich jedes Mal, wenn einer der Werte aktualisiert wurde, überprüfen.

Hat das DataGridView irgendein Ereignis, das nützlich wäre?

Antwort

9

Unterklasse DataGridView und Override OnCellFormating(), hier können Sie den Zellenwert überprüfen und die Farben entsprechend einstellen.

In Bezug auf die folgenden Kommentare über die Verwendung des entsprechenden Ereignisses, ja können Sie das tun, aber die virtuelle Methode hat eine bessere Leistung und Unterklasse DataGridView kapselt das gesamte Verhalten Ihres Gitters an einer Stelle.

+0

CellFormatting ist ein Ereignis, sodass Sie keine Unterklasse erstellen müssen. Sie können das Ereignis einfach abonnieren. Beide erreichen dasselbe. – Tergiver

+0

Thx, das OnCellFormatting-Ereignis sieht vielversprechend aus. Gerade hat einen kleinen Test privat void prisListeView_CellFormatting (object sender, DataGridViewCellFormattingEventArgs e) { if (e.Value! = Null) if (e.ColumnIndex == 3 && (dezimal) e.Value> 0) { e.CellStyle.BackColor = Farbe.DodgerBlue; } } Aber wie ändere ich den Stil für die anderen Zellen? Ex. In der obigen Spalte 3 haben sich geändert. Wie ändere ich dann den Stil für die anderen Zellen? – gulbaek

+0

Nicht sicher über die Leistung in dieser Lösung, aber es funktioniert :-) Und wenn jemand wissen muss, wie die anderen Zellen Arten zu ändern, hier ist der Code datagridview1.Rows [e.RowIndex] .Cells [ "myColumn"]. Style.BackColor = Color.DeepPink; – gulbaek

1

Nicht sicher, ob dies die optimale Lösung ist, aber ich hoffe, es hilft: Registrieren Sie sich für das PropertyChanged-Ereignis für jedes Datenquellenelement in der Datagrid-Ansicht. In Ihrem Event-Handler können Sie die erforderliche Aktion basierend auf den geänderten Werten ausführen.
Wenn Sie eine Bindungsliste für Ihre Datenquelle verwenden, registrieren Sie sich für ListChanged, um mit neuen Elementen zu arbeiten.

Verwandte Themen