Spaltenssortiermodi im DataGridView-Steuerelement von Windows Forms

Für DataGridView-Spalten gibt es drei Sortiermodi. Der Sortiermodus für jede Spalte wird über die SortMode-Eigenschaft der Spalte festgelegt, die auf einen der folgenden DataGridViewColumnSortMode-Enumerationswerte festgelegt werden kann.

Wert vom Typ DataGridViewColumnSortMode BESCHREIBUNG
Automatic Standard für Textfeldspalten. Sofern keine Spaltenüberschriften zur Auswahl verwendet werden, wird beim Klicken auf die Spaltenüberschrift DataGridView automatisch anhand dieser Spalte sortiert und eine Glyphe zum Angeben der Sortierreihenfolge angezeigt.
NotSortable Standard für Nicht-Textfeldspalten. Sie können diese Spalte programmgesteuert sortieren. Allerdings ist sie nicht für die Sortierung vorgesehen, sodass kein Platz für die Sortierglyphe reserviert ist.
Programmatic Sie können diese Spalte programmgesteuert sortieren, wobei für die Sortierglyphe Platz reserviert ist.

Sie können nach Wunsch den Sortiermodus für eine Spalte ändern, die standardmäßig auf NotSortable festgelegt ist, wenn sie Werte enthält, die sinnvoll sortiert werden können. Wenn Sie z. B. eine Datenbankspalte mit Zahlen haben, die den Status von Elementen darstellen, können Sie diese Zahlen als entsprechende Symbole anzeigen, indem Sie eine Bildspalte an die Datenbankspalte binden. Anschließend können Sie die numerischen Zellwerte in einem Handler für das DataGridView.CellFormatting-Ereignis in Bildanzeigewerte ändern. Wenn Sie in diesem Fall die SortMode-Eigenschaft auf Automatic festlegen, können Ihre Benutzer die Spalte sortieren. Die automatische Sortierung ermöglicht den Benutzern die Gruppierung von Elementen mit demselben Status, auch wenn die Status, die den Nummern entsprechen, keine natürliche Reihenfolge haben. Spalten mit Kontrollkästchen sind ein weiteres Beispiel dafür, dass die automatische Sortierung zum Gruppieren von Elementen mit gleichem Status nützlich ist.

Sie können DataGridView programmgesteuert anhand der Werte in einer beliebigen Spalte oder mehreren Spalten unabhängig von den SortMode-Einstellungen sortieren. Die programmgesteuerte Sortierung ist nützlich, wenn Sie Ihre eigene Benutzeroberfläche für die Sortierung bereitstellen oder eine benutzerdefinierte Sortierung implementieren möchten. Die Bereitstellung einer eigenen Benutzeroberfläche für die Sortierung ist z. B. nützlich, wenn Sie den DataGridView-Auswahlmodus festlegen, um die Auswahl von Spaltenüberschriften zu ermöglichen. Obwohl in diesem Fall die Spaltenüberschriften nicht für die Sortierung verwendet werden können, soll in den Überschriften die entsprechende Sortierglyphe angezeigt werden, wozu Sie die Eigenschaft SortMode auf Programmatic festlegen.

In Spalten, die auf den programmgesteuerten Sortiermodus festgelegt sind, wird nicht automatisch eine Sortierglyphe angezeigt. Für diese Spalten müssen Sie die Glyphe durch Festlegen der DataGridViewColumnHeaderCell.SortGlyphDirection-Eigenschaft selbst anzeigen. Dies ist notwendig, wenn Sie eine flexible benutzerdefinierte Sortierung wünschen. Wenn Sie beispielsweise DataGridView nach mehreren Spalten sortieren, möchten Sie vielleicht mehrere Sortierglyphen oder keine Sortierglyphe anzeigen.

Obwohl Sie DataGridView programmgesteuert nach einer beliebigen Spalte sortieren können, enthalten einige Spalten, z. B. Schaltflächenspalten, möglicherweise keine Werte, die sinnvoll sortiert werden können. Bei diesen Spalten gibt die Einstellung der SortMode-Eigenschaft NotSortable an, dass sie nie für die Sortierung verwendet werden. Es besteht also keine Notwendigkeit, in der Überschrift Platz für die Sortierglyphe zu reservieren.

Wenn DataGridView sortiert ist, können Sie sowohl die Spalte als auch die Sortierreihenfolge bestimmen, indem Sie die Werte der Eigenschaften SortedColumn und SortOrder überprüfen. Diese Werte sind nach einem benutzerdefinierten Sortiervorgang nicht sinnvoll. Weitere Informationen zur benutzerdefinierten Sortierung finden Sie im Abschnitt „Benutzerdefinierte Sortierung“ weiter unten in diesem Thema.

Wenn ein DataGridView-Steuerelement, das sowohl gebundene als auch ungebundene Spalten enthält, sortiert wird, können die Werte in den ungebundenen Spalten nicht automatisch beibehalten werden. Um diese Werte beizubehalten, müssen Sie den virtuellen Modus implementieren, indem Sie die VirtualMode-Eigenschaft auf true festlegen und die Ereignisse CellValueNeeded und CellValuePushed behandeln. Weitere Informationen finden Sie unter Vorgehensweise: Virtueller Modus im DataGridView-Steuerelement in Windows Forms. Sortieren nach ungebundenen Spalten wird im gebundenen Modus nicht unterstützt.

Programmgesteuertes Sortieren

Sie können DataGridView programmgesteuert sortieren, indem Sie die Sort-Methode aufrufen.

Die Sort(DataGridViewColumn,ListSortDirection)-Überladung der Sort-Methode verwendet als Parameter den Wert einer DataGridViewColumn- und ListSortDirection-Enumeration. Diese Überladung ist nützlich, wenn Sie nach Spalten mit Werten sortieren, die sinnvoll angeordnet werden können, für die Sie aber keine automatische Sortierung konfigurieren möchten. Wenn Sie diese Überladung aufrufen und eine Spalte mit dem Wert DataGridViewColumnSortMode.Automatic für die SortMode-Eigenschaft übergeben, werden die Eigenschaften SortedColumn und SortOrder automatisch festgelegt, und die entsprechende Sortierglyphe wird in der Spaltenüberschrift angezeigt.

Hinweis

Wenn das DataGridView-Steuerelement durch Festlegen der DataSource-Eigenschaft an eine externe Datenquelle gebunden ist, funktioniert die Überladung der Sort(DataGridViewColumn,ListSortDirection)-Methode nicht für ungebundene Spalten. Wenn zudem die VirtualMode-Eigenschaft true lautet, können Sie diese Überladung nur für gebundene Spalten aufrufen. Um zu ermitteln, ob eine Spalte datengebunden ist, überprüfen Sie den Wert der IsDataBound-Eigenschaft. Sortieren ungebundener Spalten im gebundenen Modus wird nicht unterstützt.

Benutzerdefinierte Sortierung

Sie können DataGridView anpassen, indem Sie die Sort(IComparer)-Überladung der Sort-Methode verwenden oder das SortCompare-Ereignis behandeln.

Die Überladung der Sort(IComparer)-Methode verwendet als Parameter eine Instanz einer Klasse, die die IComparer-Schnittstelle implementiert. Diese Überladung ist nützlich, wenn Sie eine benutzerdefinierte Sortierung bereitstellen möchten, z. B. wenn die Werte in einer Spalte keine natürliche Sortierreihenfolge haben oder wenn die natürliche Sortierreihenfolge ungeeignet ist. In diesem Fall können Sie keine automatische Sortierung verwenden, können aber Benutzer die Möglichkeit geben, die Sortierung durch Klicken auf die Spaltenüberschriften vorzunehmen. Sie können diese Überladung in einem Handler für das ColumnHeaderMouseClick-Ereignis aufrufen, wenn Sie für die Auswahl keine Spaltenüberschriften verwenden.

Hinweis

Die Überladung der Sort(IComparer)-Methode funktioniert nur, wenn das DataGridView-Steuerelement nicht an eine externe Datenquelle gebunden ist und die VirtualMode-Eigenschaft den Wert false hat. Um die Sortierung für an eine externe Datenquelle gebundene Spalten anzupassen, müssen Sie die von der Datenquelle bereitgestellten Sortiervorgänge verwenden. Im virtuellen Modus müssen Sie eigene Sortiervorgänge für ungebundene Spalten bereitstellen.

Um die Überladung der Sort(IComparer)-Methode zu verwenden, müssen Sie Ihre eigene Klasse erstellen, die die IComparer-Schnittstelle implementiert. Diese Schnittstelle erfordert, dass Ihre Klasse die IComparer.Compare-Methode implementiert, an die DataGridViewRow-Objekte von DataGridView als Eingabe übergeben werden, wenn die Überladung der Sort(IComparer)-Methode aufgerufen wird. Dadurch können Sie die gewünschte Zeilenreihenfolge auf Grundlage der Werte in einer beliebigen Spalte berechnen.

Die Überladung der Sort(IComparer)-Methode legt die Eigenschaften SortedColumn und SortOrder nicht fest, sodass Sie stets die DataGridViewColumnHeaderCell.SortGlyphDirection-Eigenschaft festlegen müssen, um die Sortierglyphe anzuzeigen.

Als Alternative zur Überladung der Sort(IComparer)-Methode können Sie eine benutzerdefinierte Sortierung bereitstellen, indem Sie einen Handler für das SortCompare-Ereignis implementieren. Dieses Ereignis tritt ein, wenn Benutzer auf die Überschriften von Spalten klicken, die für die automatische Sortierung konfiguriert sind, oder wenn Sie die Sort(DataGridViewColumn,ListSortDirection)-Überladung der Sort-Methode aufrufen. Das Ereignis tritt für jedes Zeilenpaar im Steuerelement auf, sodass Sie die richtige Reihenfolge berechnen können.

Hinweis

Das SortCompare-Ereignis tritt nicht ein, wenn die DataSource-Eigenschaft festgelegt ist oder der Wert der VirtualMode-Eigenschaft true ist.

Weitere Informationen