Registriert seit: 3. Jun 2010
1.611 Beiträge
Delphi 10.3 Rio
|
AW: VirtualTreeView und Sortieren
28. Apr 2021, 12:43
Moin zusammen.
Warum so umständlich mit zusätzlichem Index und Spalte und was weiß ich nicht alles? Beim Erstellen der Node wird als NodeData einfach der Pointer auf das Objekt oder auf den Index in der TObjectList<T>
an die Node übergeben. Somit ändert sich beim Sortieren für deine Daten gar nichts. Der NodeIndex wird zwar verändert, aber der interessiert dich dann nicht mehr. Die Daten werden in der Liste vorgehalten was auch dazu führt, dass du deinen VST beliebig oft leeren und wieder füllen kannst.
Unter keinen Umständen darfst du die Node-Daten mit einem Index oder einem Wert verknüpfen, der sich beim Ändern der Anzeige ebenfalls ändert und plötzlich dazu führt, dass Daten falsch angezeigt werden.
Das Sortieren des Trees solltest du im OnCompareNode()
Event durchführen. Damit bleibt es dir überlassen nach welchen Kriterien du sortieren willst. Eventuell willst du ja beim Klick auf Spalte 1 zusätzlich noch nach Spalte 2 sortieren wenn in Spalte 1 identische Werte vorkommen können usw. Ausgelöst wird der Sortiervorgang aber über das OnHeaderClick()
Event. Darin kannst du dann auch die SortDirection der Column angeben, sodass der bekannte Sortierpfeil rechts vom ColumnTitle erscheint.
Alles in allem hast du hier den Vorteil, dass du auch die Anzeige von deinen Daten weitestgehend getrennt hast. Bis auf die Verknüpfung der Node mit dem Index in der TObjectList<T>
. Aber irgendwo muss ja eine Verbindung hergestellt werden.
|