Man kennt es eigentlich von fast jedem Datengrid. Beim Klick auf den Spaltenbezeichner lässt sich der Inhalt der Liste nach dieser Spalte sortieren. Ein Ereignis á la "ColumnClick" oder "HeadClick" gibt es hier leider nicht. Die erste Schwierigkeit bestellt also schon einmal darin, in Erfahrung zu bringen, wann ein Klick auf den Spaltenbezeichner erfolgte. So schwer ist das aber gar nicht, wie nachfolgender Code zeigt: Private Sub MSFlexGrid1_Click() ' Mausposition (Row und Col) abfragen ' Falls "MouseRow" den Wert 0 enthält, erfolgte der Klick auf einen ' Spaltenbezeichner. Die Spalte selbst kann dann über die "MouseCol"- ' Eigenschaft ermittelt werden With MSFlexGrid1 If .MouseRow = 0 Then ' Klick auf Spaltenbezeichner ' ==> jetzt Spalte ermitteln MsgBox "Klick auf Spalte " & CStr(.MouseCol) End If End With End Sub So... den Klick auf den Spaltenbezeichner können wir jetzt schon einmal "abfangen". Was jetzt noch fehlt, ist das autom. Sortieren nach der jeweiligen Spalte. Hierbei soll sowohl eine aufsteigende Sortierung, als auch eine absteigende Sortierung möglich sein, d.h. beim mehrmaligen Klick auf ein und dieselbe Spalte soll die Sortierfolge einfach umgekehrt werden. Schön wäre es auch noch, die Sortier-Spalte entsprechend farblich hervorzuheben. Bspw. könnte man eine aufsteigende Sortierung "blau" kennzeichnen, eine absteigende Sortierung "rot". Let's go... Um die Sortierfolge umkehren zu können, müssen wir uns die zuletzt gewählte Sortierspalte "merken" - ebenso die zuletzt gewählte Sortierrichtung (auf-/ bzw. absteigend). Hierzu deklarieren wir folgende Variablen im Allgemein-Teil der Form: Option Explicit Private nLastSortCol As Long Private nLastSortDesc As Long Im Click-Ereignis fügen wir nachfolgenden Code ein: Private Sub MSFlexGrid1_Click() With MSFlexGrid1 ' Klick auf Spaltenbezeichner? If .MouseRow = 0 And .MouseCol > 0 Then ' Gridinhalt sortieren If nLastSortCol = .MouseCol Then ' Sortierung umkehren If nLastSortDesc = flexSortGenericAscending Then .Sort = flexSortGenericDescending nLastSortDesc = flexSortGenericDescending Else .Sort = flexSortGenericAscending nLastSortDesc = flexSortGenericAscending End If Else ' aufsteigende Sortierung .Sort = flexSortGenericAscending nLastSortCol = .MouseCol nLastSortDesc = flexSortGenericAscending End If ' Spaltenbezeichner hervorheben ' blau: aufsteigende Sortierung ' rot: absteigende Sortierung Dim i As Long For i = 1 To .Cols - 1 .Row = 0: .Col = i .CellForeColor = IIf(i = nLastSortCol, _ IIf(nLastSortDesc = flexSortGenericAscending, vbBlue, vbRed), vbBlack) Next i End If End With End Sub Das Beispielprojekt zu diesem Tipp liest die Daten aus einer Datenbank aus und zeigt diese im FlexGrid-Control an. Per Klick auf die Spaltenbezeichner wird der Inhalt dann entsprechend nach der gewählten Spalte sortiert. |