Zellstile im DataGridView-Steuerelement in Windows Forms

Jede Zelle im DataGridView-Steuerelement kann einen eigenen Stil haben, z. B. für Textformat, Hintergrundfarbe, Vordergrundfarbe und Schriftart. In der Regel haben jedoch mehrere Zellen bestimmte Stilmerkmale gemeinsam.

Gruppen von Zellen mit gemeinsamen Stilen können alle Zellen in bestimmten Zeilen oder Spalten, alle Zellen mit bestimmten Werten oder alle Zellen im Steuerelement umfassen. Da sich diese Gruppen überlappen, kann jede Zelle ihre Stilinformationen von mehreren Stellen erhalten. Möglicherweise möchten Sie z. B., dass alle Zellen in einem DataGridView-Steuerelement die gleiche Schriftart aufweisen, aber nur Zellen in Währungsspalten das Währungsformat enthalten und nur Währungszellen mit negativen Zahlen eine rote Vordergrundfarbe haben.

Die DataGridViewCellStyle-Klasse

Die DataGridViewCellStyle-Klasse enthält die folgenden Eigenschaften im Zusammenhang mit dem visuellen Stil:

Diese Klasse enthält auch die folgenden Eigenschaften im Zusammenhang mit der Formatierung:

Weitere Informationen zu diesen Eigenschaften und anderen Zellenstileigenschaften finden Sie in der Referenzdokumentation zu DataGridViewCellStyle und in den Themen, die im nachstehenden Abschnitt „Weitere Informationen“ aufgeführt sind.

Verwenden von DataGridViewCellStyle-Objekten

Sie können DataGridViewCellStyle-Objekte aus verschiedenen Eigenschaften der Klassen DataGridView, DataGridViewColumn, DataGridViewRow und DataGridViewCell und ihren abgeleiteten Klassen abrufen. Wenn eine dieser Eigenschaften noch nicht festgelegt wurde, wird beim Abrufen ihres Werts ein neues DataGridViewCellStyle-Objekt erstellt. Sie können auch Ihre eigenen DataGridViewCellStyle-Objekte instanziieren und sie diesen Eigenschaften zuweisen.

Sie können die unnötige Duplizierung von Stilinformationen vermeiden, indem Sie DataGridViewCellStyle-Objekte für mehrere DataGridView-Elemente freigeben. Da die auf Steuerelement-, Spalten- und Zeilenebene festgelegten Stile durch jede Ebene bis zur Zellebene gefiltert werden, können Sie die Duplizierung von Stilen auch vermeiden, indem Sie auf jeder Ebene nur die Stileigenschaften festlegen, die sich von den darüber liegenden Ebenen unterscheiden. Dies wird im nachfolgenden Abschnitt über die Vererbung von Stilen ausführlicher beschrieben.

In der folgenden Tabelle sind die primären Eigenschaften zum Abrufen oder Festlegen von DataGridViewCellStyle-Objekten aufgeführt.

Eigenschaft Klassen BESCHREIBUNG
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRow und abgeleitete Klassen Dient zum Abrufen oder Festlegen von Standardstilen für alle Zellen im gesamten Steuerelement (einschließlich Kopfzeilenzellen), in einer Spalte oder einer Zeile.
RowsDefaultCellStyle DataGridView Dient zum Abrufen oder Festlegen von Standardzellenstilen für alle Zeilen im Steuerelement. Dies gilt nicht für Kopfzeilenzellen.
AlternatingRowsDefaultCellStyle DataGridView Dient zum Abrufen oder Festlegen von Standardzellenstilen für alternierende Zeilen im Steuerelement. Dient zum Erzeugen eines Ledger-ähnlichen Effekts.
RowHeadersDefaultCellStyle DataGridView Dient zum Abrufen oder Festlegen von Standardzellenstilen für die Zeilenüberschriften des Steuerelements. Wird vom aktuellen Design überschrieben, wenn visuelle Stile aktiviert sind.
ColumnHeadersDefaultCellStyle DataGridView Dient zum Abrufen oder Festlegen von Standardzellenstilen für die Spaltenüberschriften des Steuerelements. Wird vom aktuellen Design überschrieben, wenn visuelle Stile aktiviert sind.
Style DataGridViewCell und abgeleitete Klassen Dient zum Abrufen oder Festlegen von Stilen, die auf Zellenebene angegeben sind. Diese Stile überschreiben diejenigen, die von höheren Ebenen geerbt wurden.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumn und abgeleitete Klassen Dient zum Abrufen aller Stile, die derzeit auf die Zelle, Zeile oder Spalte angewendet werden, einschließlich der von höheren Ebenen geerbten Stile.

Wie bereits erwähnt, wird beim Abrufen des Werts einer Stileigenschaft automatisch ein neues DataGridViewCellStyle-Objekt instanziiert, wenn die Eigenschaft nicht zuvor festgelegt wurde. Um zu vermeiden, dass diese Objekte unnötig erstellt werden, verfügen die Zeilen- und Spaltenklassen über eine HasDefaultCellStyle-Eigenschaft, mit der Sie feststellen können, ob die DefaultCellStyle-Eigenschaft festgelegt wurde. Auch die Zellklassen haben eine HasStyle-Eigenschaft, die angibt, ob die Style-Eigenschaft festgelegt wurde.

Jede der Stileigenschaften hat für das DataGridView-Steuerelement ein entsprechendes PropertyNameChanged-Ereignis. Bei Zeilen-, Spalten- und Zelleneigenschaften beginnt der Name des Ereignisses mit „Row“, „Column“ oder „Cell“ (z. B. RowDefaultCellStyleChanged). Jede dieser Ereignisse tritt auf, wenn die entsprechende Stileigenschaft auf ein anderes DataGridViewCellStyle-Objekt festgelegt ist. Diese Ereignisse treten nicht auf, wenn Sie ein DataGridViewCellStyle-Objekt aus einer Stileigenschaft abrufen und dessen Eigenschaftswerte ändern. Um auf Änderungen an den Zellenstilobjekten selbst zu reagieren, behandeln Sie das CellStyleContentChanged-Ereignis.

Stilvererbung

Jede DataGridViewCell ruft ihre Darstellung aus ihrer InheritedStyle-Eigenschaft ab. Das von dieser Eigenschaft zurückgegebene DataGridViewCellStyle-Objekt erbt seine Werte von einer Hierarchie von Eigenschaften des Typs DataGridViewCellStyle. Diese Eigenschaften sind im Folgenden in der Reihenfolge aufgeführt, in der die InheritedStyle für Nicht-Kopfzeilenzellen ihre Werte erhalten.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (nur für Zellen in Zeilen mit ungeraden Indexnummern)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Für Zeilen- und Spaltenkopfzellen wird die InheritedStyle-Eigenschaft durch Werte aus der folgenden Liste von Quelleigenschaften in der angegebenen Reihenfolge aufgefüllt.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle oder DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Dieser Prozess wird anhand des folgenden Diagramms veranschaulicht.

Properties of type DataGridViewCellStyle

Sie können auch auf die Stile zugreifen, die von bestimmten Zeilen und Spalten geerbt werden. Die InheritedStyle-Eigenschaft der Spalte erbt ihre Werte von den folgenden Eigenschaften.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Die InheritedStyle-Eigenschaft der Zeile erbt ihre Werte von den folgenden Eigenschaften.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (nur für Zellen in Zeilen mit ungeraden Indexnummern)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Für jede Eigenschaft in einem DataGridViewCellStyle-Objekt, das von einer InheritedStyle-Eigenschaft zurückgegeben wird, wird der Eigenschaftswert anhand des ersten Zellenstils in der entsprechenden Liste ermittelt, für den die entsprechende Eigenschaft auf einen anderen Wert als die Standardeinstellungen für die DataGridViewCellStyle-Klasse festgelegt wurde.

Die folgende Tabelle veranschaulicht, wie der Wert der ForeColor-Eigenschaft für eine Beispielzelle von ihrer enthaltenen Spalte geerbt wird.

Eigenschaft des Typs DataGridViewCellStyle Beispiel des Werts ForeColor für abgerufenes Objekt
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

In diesem Fall ist der Color.Red-Wert in der Zeile der Zelle der erste reale Wert in der Liste. Dieser wird zum Wert der ForeColor-Eigenschaft des InheritedStyle der Zelle.

Die folgende Abbildung veranschaulicht, wie verschiedene DataGridViewCellStyle-Eigenschaften ihre Werte von verschiedenen Stellen erben können.

DataGridView property-value inheritance

Indem Sie die Vorteile der Stilvererbung nutzen, können Sie geeignete Stile für das gesamte Steuerelement bereitstellen, ohne die gleichen Informationen an mehreren Stellen angeben zu müssen.

Obwohl Kopfzeilenzellen wie beschrieben an der Stilvererbung teilnehmen, haben die von den Eigenschaften ColumnHeadersDefaultCellStyle und RowHeadersDefaultCellStyle des DataGridView-Steuerelements zurückgegebenen Objekte anfängliche Eigenschaftswerte, die die Eigenschaftswerte des von der DefaultCellStyle-Eigenschaft zurückgegebenen Objekts überschreiben. Wenn Sie möchten, dass die für das von der DefaultCellStyle-Eigenschaft zurückgegebene Objekt festgelegten Eigenschaften für Zeilen- und Spaltenkopfzeilen gelten, müssen Sie die entsprechenden Eigenschaften der von den Eigenschaften ColumnHeadersDefaultCellStyle und RowHeadersDefaultCellStyle zurückgegebenen Objekte auf die für die DataGridViewCellStyle-Klasse angegebenen Standardwerte festlegen.

Hinweis

Wenn visuelle Stile aktiviert sind, werden die Zeilen- und Spaltenkopfzeilen (mit Ausnahme von TopLeftHeaderCell) automatisch mit dem aktuellen Design versehen und überschreiben alle durch diese Eigenschaften festgelegten Stile.

Die Typen DataGridViewButtonColumn, DataGridViewImageColumn und DataGridViewCheckBoxColumn initialisieren auch einige Werte des Objekts, das von der DefaultCellStyle-Eigenschaft der Spalte zurückgegeben wird. Weitere Informationen finden Sie in der Referenzdokumentation zu diesen Typen.

Dynamisches Festlegen von Stilen

Um die Stile von Zellen mit bestimmten Werten anzupassen, implementieren Sie einen Handler für das DataGridView.CellFormatting-Ereignis. Handler für dieses Ereignis erhalten ein Argument des Typs DataGridViewCellFormattingEventArgs. Dieses Objekt enthält Eigenschaften, mit denen Sie den Wert der Zelle, die formatiert werden soll, sowie ihre Position im DataGridView-Steuerelement bestimmen können. Dieses Objekt enthält auch eine CellStyle-Eigenschaft, die mit dem Wert der InheritedStyle-Eigenschaft der zu formatierenden Zelle initialisiert wird. Sie können die Zellenstileigenschaften so ändern, dass Stilinformationen für Wert und Position der Zelle angegeben werden.

Hinweis

Die Ereignisse RowPrePaint und RowPostPaint erhalten ebenfalls ein DataGridViewCellStyle-Objekt in den Ereignisdaten. Aber in ihrem Fall handelt es sich um eine Kopie der InheritedStyle-Eigenschaft der Zeile, die nur zu Lesezwecken dient. Änderungen daran haben keine Auswirkungen auf das Steuerelement.

Sie können die Stile einzelner Zellen auch dynamisch als Reaktion auf Ereignisse wie DataGridView.CellMouseEnter und CellMouseLeave ändern. In einem Handler für das CellMouseEnter-Ereignis können Sie beispielsweise den aktuellen Wert der Hintergrundfarbe der Zelle speichern (der über die Style-Eigenschaft der Zelle abgerufen wird) und ihn dann auf eine neue Farbe festlegen, die die Zelle hervorhebt, wenn Sie den Mauszeiger darüber bewegen. In einem Handler für das CellMouseLeave-Ereignis können Sie dann die Hintergrundfarbe auf den ursprünglichen Wert zurücksetzen.

Hinweis

Das Zwischenspeichern der in der Style-Eigenschaft der Zelle gespeicherten Werte ist unabhängig davon wichtig, ob ein bestimmter Stilwert festgelegt ist. Wenn Sie eine Stileinstellung vorübergehend ersetzen, sorgt das Wiederherstellen des ursprünglichen Zustands „Nicht festgelegt“ dafür, dass die Zelle wieder die Stileinstellung von einer höheren Ebene erbt. Wenn Sie den tatsächlichen Stil einer Zelle bestimmen müssen, unabhängig davon, ob der Stil geerbt wird, verwenden Sie die InheritedStyle-Eigenschaft der Zelle.

Siehe auch