Zellstile im DataGridView-Steuerelement in Windows Forms

Aktualisiert: November 2007

Jede Zelle im DataGridView-Steuerelement kann über ihren eigenen Stil verfügen, z. B. Textformat, Hintergrundfarbe, Vordergrundfarbe und Schriftart. In der Regel weisen jedoch mehrere Zellen die gleichen Stilmerkmale auf.

Zellengruppen 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 überschneiden, kann jede Zelle ihre Stilinformationen von mehreren Stellen abrufen. Beispielsweise möchten Sie, dass jede Zelle in einem DataGridView-Steuerelement dieselbe Schriftart verwendet, aber nur Zellen in Währungsspalten das Währungsformat und nur Währungszellen mit negativen Zahlen eine rote Vordergrundfarbe verwenden sollen.

Die DataGridViewCellStyle-Klasse

Die DataGridViewCellStyle-Klasse enthält die folgenden Eigenschaften für den visuellen Stil:

Diese Klasse enthält außerdem die folgenden Eigenschaften für die Formatierung:

Weitere Informationen über diese Eigenschaften und andere Zellstileigenschaften finden Sie in der DataGridViewCellStyle-Referenzdokumentation und den unter Siehe auch aufgeführten Themen.

Verwenden von DataGridViewCellStyle-Objekten

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

Sie können unnötige Duplizierungen von Stilinformationen vermeiden, indem Sie DataGridViewCellStyle-Objekte für mehrere DataGridView-Elemente freigeben. Da die auf Steuerelement-, Spalten- und Zeilenebene festgelegten Stile bis auf Zellebene filtern, können Sie außerdem doppelte Stile vermeiden, indem Sie auf jeder Ebene nur die Stileigenschaften festlegen, die sich von den höheren Ebenen unterscheiden. Dies wird ausführlicher im Abschnitt Stilvererbung weiter unten beschrieben.

In der folgenden Tabelle werden die primären Eigenschaften aufgelistet, die die DataGridViewCellStyle-Objekte abrufen oder festlegen.

Eigenschaft

Klassen

Beschreibung

DefaultCellStyle

DataGridView, DataGridViewColumn, DataGridViewRow und abgeleitete Klassen

Ruft Standardstile ab bzw. legt Standardstile fest, die von allen Zellen im gesamten Steuerelement (einschließlich Headerzellen), in einer Spalte oder in einer Zeile verwendet werden.

RowsDefaultCellStyle

DataGridView

Ruft Standardstile ab bzw. legt Standardstile fest, die von allen Zeilen im Steuerelement verwendet werden. Dies umfasst keine Headerzellen.

AlternatingRowsDefaultCellStyle

DataGridView

Ruft Standardstile ab bzw. legt Standardstile fest, die von abwechselnden Zeilen im Steuerelement verwendet werden. Wird verwendet, um einen Effekt wie in einem Ledger zu erstellen.

RowHeadersDefaultCellStyle

DataGridView

Ruft Standardzellstile ab bzw. legt Standardzellstile fest, die von den Zeilenheadern des Steuerelements verwendet werden. Wird vom aktuellen Design überschrieben, wenn visuelle Stile aktiviert sind.

ColumnHeadersDefaultCellStyle

DataGridView

Ruft Standardzellstile ab bzw. legt Standardzellstile fest, die von den Spaltenheadern des Steuerelements verwendet werden. Wird vom aktuellen Design überschrieben, wenn visuelle Stile aktiviert sind.

Style

DataGridViewCell und abgeleitete Klassen

Ruft Stile ab bzw. legt Stile fest, die auf Zellenebene festgelegt wurden. Diese Stile überschreiben diejenigen, die von höheren Ebenen geerbt wurden.

InheritedStyle

DataGridViewCell, DataGridViewRow, DataGridViewColumn und abgeleitete Klassen

Ruft alle Stile ab, die derzeit auf die Zelle, Zeile oder Spalte angewendet werden, einschließlich von höheren Ebenen geerbte Stile.

Wie bereits erwähnt, wird durch das Abrufen des Werts einer Stileigenschaft automatisch ein neues DataGridViewCellStyle-Objekt instanziiert, wenn die Eigenschaft nicht zuvor festgelegt wurde. Damit diese Objekte nicht unnötig erstellt werden, verfügen die Zeilen- und Spaltenklassen über eine HasDefaultCellStyle-Eigenschaft, anhand derer Sie überprüfen können, ob die DefaultCellStyle-Eigenschaft festgelegt wurde. Ebenso verfügen die Zellenklassen über eine HasStyle-Eigenschaft, die angibt, ob die Style-Eigenschaft festgelegt wurde.

Jede der Stileigenschaften verfügt über ein entsprechendes PropertyNameChanged-Ereignis auf dem DataGridView-Steuerelement. Für Zeilen-, Spalten- und Zelleneigenschaften fängt der Name des Ereignisses mit "Row", "Column" oder "Cell" an (z. B. RowDefaultCellStyleChanged). Jedes 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 von einer Stileigenschaft abrufen und seine Eigenschaftenwerte ändern. Um auf Änderungen an den Zellstilobjekten selbst zu reagieren, behandeln Sie das CellStyleContentChanged-Ereignis.

Stilvererbung

Jede DataGridViewCell ruft ihre Darstellung von der zugehörigen InheritedStyle-Eigenschaft ab. Das von dieser Eigenschaft zurückgegebene DataGridViewCellStyle-Objekt erbt seine Werte von einer Eigenschaftenhierarchie des Typs DataGridViewCellStyle. Diese Eigenschaften werden unten in der Reihenfolge aufgelistet, in der der InheritedStyle für Nicht-Headerzellen seine Werte abruft.

  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 Spaltenheaderzellen wird die InheritedStyle-Eigenschaft mit Werten aus der folgenden Liste mit Quelleigenschaften in der angegebenen Reihenfolge gefüllt.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle oder DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Dieser Prozess wird anhand des folgenden Diagramms veranschaulicht.

Eigenschaften des DataGridViewCellStyle-Typs

Sie können auch auf die Stile zugreifen, die von bestimmten Zeilen und Spalten geerbt wurden. Die InheritedStyle-Spalteneigenschaft erbt die Werte von den folgenden Eigenschaften.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Die InheritedStyle-Zeileneigenschaft erbt die 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 Eigenschaftenwert vom ersten Zellstil in der entsprechenden Liste abgerufen, deren Eigenschaft auf einen anderen Wert als die Standardwerte der DataGridViewCellStyle-Klasse festgelegt ist.

Die folgende Tabelle zeigt, wie der ForeColor-Eigenschaftenwert für eine Beispielzelle von der Spalte geerbt wird, in der er enthalten ist.

Eigenschaft vom Typ DataGridViewCellStyle

ForeColor-Beispielwert 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 aus der Zeile der Zelle der erste reale Wert in der Liste. Dieser wird zum ForeColor-Eigenschaftenwert des InheritedStyle der Zelle.

Im folgenden Diagramm wird gezeigt, wie verschiedene DataGridViewCellStyle-Eigenschaften ihre Werte von verschiedenen Stellen erben können.

Vererbung von DataGridView-Eigenschaftenwerten

Mithilfe der Stilvererbung können Sie geeignete Stile für das gesamte Steuerelement bereitstellen, ohne dieselben Informationen an mehreren Stellen angeben zu müssen.

Obwohl Headerzellen bei der Stilvererbung wie beschrieben mitwirken, verfügen die von der ColumnHeadersDefaultCellStyle-Eigenschaft und der RowHeadersDefaultCellStyle-Eigenschaft des DataGridView-Steuerelements zurückgegebenen Objekte anfänglich über Eigenschaftenwerte, die die Eigenschaftenwerte des von der DefaultCellStyle-Eigenschaft zurückgegebenen Objekts überschreiben. Wenn die Eigenschaften, die für das von der DefaultCellStyle-Eigenschaft zurückgegebene Objekt festgelegt sind, auf Zeilen- und Spaltenheader angewendet werden sollen, müssen Sie die entsprechenden Eigenschaften der Objekte, die von der ColumnHeadersDefaultCellStyle-Eigenschaft und der RowHeadersDefaultCellStyle-Eigenschaft zurückgegeben werden, auf die für die DataGridViewCellStyle-Klasse angegebenen Standardwerte festlegen.

Hinweis:

Wenn visuelle Stile aktiviert sind, wird auf die Zeilen- und Spaltenheader (mit Ausnahme der TopLeftHeaderCell) automatisch das aktuelle Design angewendet, das alle Stile überschreibt, die von diesen Eigenschaften festgelegt wurden.

Die DataGridViewButtonColumn-, DataGridViewImageColumn- und DataGridViewCheckBoxColumn-Typen initialisieren auch einige Werte des Objekts, das von der DefaultCellStyle-Spalteneigenschaft zurückgegeben wird. Weitere Informationen finden Sie in der Referenzdokumentation für diese Typen.

Dynamisches Festlegen von Stilen

Um die Stile der Zellen mit bestimmten Werten anzupassen, implementieren Sie einen Handler für das DataGridView.CellFormatting-Ereignis. Handler für dieses Ereignis empfangen ein Argument des DataGridViewCellFormattingEventArgs-Typs. Dieses Objekt enthält Eigenschaften, mit denen Sie den Wert der formatierten Zelle sowie ihre Position im DataGridView-Steuerelement bestimmen können. Dieses Objekt enthält außerdem eine CellStyle-Eigenschaft, die auf den Wert der InheritedStyle-Eigenschaft der formatierten Zelle initialisiert wird. Sie können die Zellstileigenschaften ändern, um für den Wert und die Position der Zelle geeignete Stilinformationen anzugeben.

Hinweis:

Das RowPrePaint-Ereignis und das RowPostPaint-Ereignis empfangen ebenfalls ein DataGridViewCellStyle-Objekt in den Ereignisdaten. In ihrem Fall handelt es sich aber um eine schreibgeschützte Kopie der InheritedStyle-Zeileneigenschaft, deren Änderungen sich nicht auf das Steuerelement auswirken.

Sie können auch die Stile einzelner Zellen als Reaktion auf Ereignisse wie das DataGridView.CellMouseEnter-Ereignis und das CellMouseLeave-Ereignis dynamisch bearbeiten. Beispielsweise könnten Sie in einem Handler für das CellMouseEnter-Ereignis den aktuellen Wert für die Hintergrundfarbe der Zelle speichern (der durch die Style-Eigenschaft der Zelle abgerufen wird) und ihn anschließend auf eine neue Farbe festlegen, mit der die Zelle hervorgehoben wird, wenn die Maus darüber bewegt wird. In einem Handler für das CellMouseLeave-Ereignis können Sie dann die Hintergrundfarbe auf den ursprünglichen Wert zurücksetzen.

Hinweis:

Unabhängig davon, ob ein bestimmter Stilwert festgelegt wurde, ist es wichtig, die in der Style-Eigenschaft der Zelle gespeicherten Werte zwischenzuspeichern. Wenn Sie eine Stileinstellung vorübergehend ersetzen, wird durch das Wiederherstellen des ursprünglichen, nicht festgelegten Zustands sichergestellt, dass die Zelle die Stileinstellung wieder von einer höheren Ebene erbt. Wenn Sie den tatsächlichen Stil einer Zelle unabhängig davon bestimmen müssen, ob der Stil geerbt wird, verwenden Sie die InheritedStyle-Eigenschaft der Zelle.

Siehe auch

Aufgaben

Gewusst wie: Festlegen von Standardzellenformaten für das DataGridView-Steuerelement in Windows Forms

Konzepte

Datenformatierung im DataGridView-Steuerelement in Windows Forms

Referenz

DataGridView

DataGridViewCellStyle

DataGridView.AlternatingRowsDefaultCellStyle

DataGridView.ColumnHeadersDefaultCellStyle

DataGridView.DefaultCellStyle

DataGridView.RowHeadersDefaultCellStyle

DataGridView.RowsDefaultCellStyle

DataGridViewBand.InheritedStyle

DataGridViewRow.InheritedStyle

DataGridViewColumn.InheritedStyle

DataGridViewBand.DefaultCellStyle

DataGridViewCell.InheritedStyle

DataGridViewCell.Style

DataGridView.CellFormatting

DataGridView.CellStyleContentChanged

DataGridView.RowPrePaint

DataGridView.RowPostPaint

Weitere Ressourcen

Grundlegende Formatierungen und Formate im DataGridView-Steuerelement in Windows Forms