Spaltenssortiermodi im DataGridView-Steuerelement von Windows Forms

DataGridView-Spalten verfügen über drei Sortiermodi. Der Sortiermodus für die jeweiligen Spalten wird durch die SortMode-Eigenschaft der Spalte bestimmt, die auf einen der folgenden Werte für die DataGridViewColumnSortMode-Enumeration festgelegt werden kann.

DataGridViewColumnSortMode-Wert

Beschreibung

Automatic

Die Vorgabe für Textfeldspalten. Sofern keine Spaltenheader zur Auswahl verwendet werden, wird durch Klicken auf den Spaltenheader die DataGridView automatisch nach dieser Spalte sortiert und die Sortierreihenfolge durch ein Symbol angezeigt.

NotSortable

Die Vorgabe für Nicht-Textfeldspalten. Sie können diese Spalte zwar programmgesteuert sortieren, da sie jedoch nicht zum Sortieren vorgesehen ist, ist kein Platz für das Sortiersymbol reserviert.

Programmatic

Sie können diese Spalte programmgesteuert sortieren, wobei Platz für das Sortiersymbol reserviert ist.

Möglicherweise möchten Sie den Sortiermodus für eine Spalte ändern, die standardmäßig auf NotSortable festgelegt ist, wenn diese Spalte Werte enthält, die sinnvoll sortiert werden können. Wenn Sie beispielsweise über eine Datenbankspalte mit Zahlen verfügen, die den Elementzustand 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 Zellenwerte in Bildanzeigewerte in einem Handler für das DataGridView.CellFormatting-Ereignis ändern. In diesem Fall können die Benutzer die Spalte sortieren, wenn Sie die SortMode-Eigenschaft auf Automatic festlegen. Durch das automatische Sortieren können die Benutzer Elemente mit demselben Zustand gruppieren, auch wenn die den Zahlen entsprechenden Zustände keine natürliche Abfolge aufweisen. Ein weiteres Beispiel, bei dem das automatische Sortieren zum Gruppieren von Elementen mit demselben Zustand hilfreich ist, sind Kontrollkästchenspalten.

Sie können eine DataGridView programmgesteuert anhand der Werte in einer oder mehreren Spalten sortieren, unabhängig davon, welcher SortMode eingestellt ist. Das programmgesteuerte Sortieren bietet sich an, wenn Sie Ihre eigene Benutzeroberfläche (UI) zum Sortieren bereitstellen oder benutzerdefiniertes Sortieren implementieren möchten. Eine eigene Sortierbenutzeroberfläche ist beispielsweise hilfreich, wenn Sie über den DataGridView-Auswahlmodus die Spaltenheaderauswahl aktivieren. Auch wenn die Spaltenheader nicht zum Sortieren verwendet werden können, soll in den Headern dennoch das entsprechende Sortiersymbol angezeigt werden. In diesem Fall würden Sie die SortMode-Eigenschaft auf Programmatic festlegen.

In Spalten, für die ein programmgesteuerter Sortiermodus festgelegt ist, wird nicht automatisch ein Sortiersymbol angezeigt. Für diese Spalten müssen Sie das Symbol selbst anzeigen, indem Sie die DataGridViewColumnHeaderCell.SortGlyphDirection-Eigenschaft festlegen. Dies ist erforderlich, wenn Sie die benutzerdefinierte Sortierung flexibel anpassen möchten. Wenn Sie beispielsweise die DataGridView nach mehreren Spalten sortieren möchten, ist es unter Umständen angebracht, mehrere Sortiersymbole oder gar kein Sortiersymbol anzuzeigen.

Auch wenn Sie eine DataGridView programmgesteuert nach jeder 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 wird durch die SortMode-Eigenschafteneinstellung NotSortable angegeben, dass sie grundsätzlich nicht zum Sortieren verwendet werden, d. h., im Header muss kein Platz für das Sortiersymbol reserviert werden.

Wenn ein DataGridView sortiert wird, können Sie sowohl die Sortierspalte als auch die Sortierreihenfolge bestimmen, indem Sie die Werte der SortedColumn-Eigenschaft und der SortOrder-Eigenschaft festlegen. Diese Werte sind nach einem benutzerdefinierten Sortiervorgang nicht mehr von Bedeutung. Weitere Informationen über benutzerdefiniertes Sortieren finden Sie weiter unten in diesem Thema unter "Benutzerdefiniertes Sortieren".

Wenn ein DataGridView-Steuerelement, das sowohl gebundene als auch ungebundene Spalten enthält, sortiert wird, bleiben die Werte in den ungebundenen Spalten nicht automatisch erhalten. Um diese Werte zu erhalten, müssen Sie den virtuellen Modus implementieren, indem Sie die VirtualMode-Eigenschaft auf true festlegen und das CellValueNeeded-Ereignis und das CellValuePushed-Ereignis behandeln. Weitere Informationen finden Sie unter Gewusst wie: Implementieren des virtuellen Modus im DataGridView-Steuerelement in Windows Forms. Das Sortieren nach ungebundenen Spalten im gebundenen Modus wird nicht unterstützt.

Programmgesteuertes Sortieren

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

Die Sort(DataGridViewColumn,ListSortDirection)-Überladung der Sort-Methode verwendet einen DataGridViewColumn-Enumerationswert und einen ListSortDirection-Enumerationswert als Parameter. Diese Überladung ist hilfreich, wenn Sie nach Spalten mit Werten sortieren, die sinnvoll sortiert werden können, die Sie jedoch nicht für das automatische Sortieren konfigurieren möchten. Wenn Sie diese Überladung aufrufen und in einer Spalte mit dem SortMode-Eigenschaftswert DataGridViewColumnSortMode.Automatic übergeben, werden die SortedColumn-Eigenschaft und die SortOrder-Eigenschaft automatisch festgelegt, und das entsprechende Sortiersymbol wird im Spaltenheader angezeigt.

Tipp

Wenn das DataGridView-Steuerelement durch Festlegen der DataSource-Eigenschaft an eine externe Datenquelle gebunden ist, kann die überladene Sort(DataGridViewColumn,ListSortDirection)-Methode nicht für ungebundene Spalten verwendet werden. Wenn die VirtualMode-Eigenschaft auf true festgelegt ist, können Sie diese Überladung außerdem nur für gebundene Spalten aufrufen. Um zu bestimmen, ob eine Spalte datengebunden ist, überprüfen Sie den IsDataBound-Eigenschaftswert. Das Sortieren von ungebundenen Spalten im gebundenen Modus wird nicht unterstützt.

Benutzerdefiniertes Sortieren

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

Die überladene Sort(IComparer)-Methode verwendet eine Instanz einer Klasse, die die IComparer-Schnittstelle als Parameter implementiert. Diese Überladung ist hilfreich, wenn Sie benutzerdefiniertes Sortieren bereitstellen, z. B. wenn die Werte in einer Spalte keine natürliche Sortierreihenfolge aufweisen oder die natürliche Sortierreihenfolge ungeeignet ist. In diesem Fall können Sie keine automatische Sortierung verwenden, möchten es den Benutzern aber möglicherweise trotzdem ermöglichen, durch Klicken auf die Spaltenheader zu sortieren. Sie können diese Überladung in einem Handler für das ColumnHeaderMouseClick-Ereignis aufrufen, wenn Sie keine Spaltenheader zur Auswahl verwenden.

Tipp

Die überladene Sort(IComparer)-Methode funktioniert nur, wenn das DataGridView-Steuerelement nicht an eine externe Datenquelle gebunden ist und der VirtualMode-Eigenschaftswert false lautet. Zum Anpassen der Sortierung für Spalten, die an eine externe Datenquelle gebunden sind, müssen Sie die von der Datenquelle bereitgestellten Sortiervorgänge verwenden. Im virtuellen Modus müssen Sie Ihre eigenen Sortiervorgänge für ungebundene Spalten bereitstellen.

Zur Verwendung der überladenen Sort(IComparer)-Methode müssen Sie Ihre eigene Klasse erstellen, die die IComparer-Schnittstelle implementiert. Für diese Schnittstelle ist es erforderlich, dass Sie die IComparer.Compare-Methode implementieren, an die DataGridViewRow-Objekte von der DataGridView als Eingabe übergeben werden, wenn die überladene Sort(IComparer)-Methode aufgerufen wird. Dadurch können Sie die richtige Zeilensortierung anhand der Werte in den Spalten berechnen.

Die überladene Sort(IComparer)-Methode legt die SortedColumn-Eigenschaft und die SortOrder-Eigenschaft nicht fest. Daher müssen Sie stets die DataGridViewColumnHeaderCell.SortGlyphDirection-Eigenschaft festlegen, damit das Sortiersymbol angezeigt wird.

Alternativ zur überladenen Sort(IComparer)-Methode können Sie benutzerdefiniertes Sortieren bereitstellen, indem Sie einen Handler für das SortCompare-Ereignis implementieren. Dieses Ereignis tritt ein, wenn Benutzer auf die Header von Spalten klicken, die für automatisches Sortieren konfiguriert wurden, oder wenn Sie die Sort(DataGridViewColumn,ListSortDirection)-Überladung der Sort-Methode aufrufen. Da das Ereignis für jedes Zeilenpaar im Steuerelement auftritt, können Sie die richtige Reihenfolge berechnen.

Tipp

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

Siehe auch

Aufgaben

Gewusst wie: Festlegen der Sortierungsmodi für Spalten im DataGridView-Steuerelement in Windows Forms

Referenz

DataGridView

DataGridView.Sort

DataGridView.SortedColumn

DataGridView.SortOrder

DataGridViewColumn.SortMode

DataGridViewColumnHeaderCell.SortGlyphDirection

Konzepte

Gewusst wie: Anpassen der Sortierung im DataGridView-Steuerelement in Windows Forms

Weitere Ressourcen

Sortieren von Daten im DataGridView-Steuerelement in Windows Forms