![]() |
TreeView nach Nodes sortieren
Hallo,
ich hoffe, ich kann's richtig erklären: Ich habe ein TreeView, bei welchem ich Records zu den Nodes hinterlegt habe (das, was hier im Forum meist mit TreeNodeEx bezeichnet wird). Dabei zeigt ein Record auf ein Feld "Datum", welches ein String im Format "mm/yyyy" ist (z. B. 05/2008). Ein weiterer Record enthält den Titel, welcher dann in Verbindung mit dem Datum den Nodetext ergibt (z. B. "05/2008: Eintrag 01"). Mein Ansinnen ist nun, die Nodes dem Datum entsprechend zu sortieren. Rein nach dem Nodetext zu gehen, funktioniert natürlich leider nicht, da dabei 09/2007 natürlich nach 05/2008 käme, der Definition nach aber davor liegen sollte. Mein Gedanke war nun, die Nodes in eine Stringlist zu transportieren, die Datumsfelder in ein Timestamp zu konvertieren (Problem 1), dann nach diesem Timestamp zu sortieren (Problem 2) und dann wieder ins TreeView zu schreiben (Problem 3). Nachdem ich nun wirklich lange gesucht und dabei nur die Funktion CustomSort gefunden habe (welche mich allerdings nicht weitergebracht hat), hoffe ich nun, dass ich nicht der einzige Mensch auf Erden bin, der dieses Problem hat und dass es bereits eine Lösung oder einen Ansatz zur Findung derselben gibt. Falls ihr mir da helfen könntet, wäre euch mein nahezu ewiger Dank gewiss :-) Gute Nacht und Danke Opi |
Re: TreeView nach Nodes sortieren
Nach der Methode Code vom Layout trennen, folgende Idee:
- Record => Code - TreeView => Layout Den Timestamp als Ordinalzahl im Record speichern, die Records nach Timestamp sortieren und den Treeview anschließend neu aufbauen. Damit kannst Du Deinem Algorhythmus in Zukunft wesentlich schneller immer wieder ein neues Layout verpassen. ;) |
Re: TreeView nach Nodes sortieren
Moin,
wenn ich den String MM/YYYY als gegeben ansehe, dann funktioniert die Sortierung so:
Delphi-Quellcode:
Grüße vom marabu
type
TDemoForm = class(TForm) TreeView: TTreeView; Button: TButton; procedure FormCreate(Sender: TObject); procedure TreeViewCompare(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer); procedure ButtonClick(Sender: TObject); private fs: TFormatSettings; end; var DemoForm: TDemoForm; implementation {$R *.dfm} uses DateUtils; procedure TDemoForm.FormCreate(Sender: TObject); begin GetLocaleFormatSettings(GetSystemDefaultLCID, fs); fs.DateSeparator := '/'; fs.ShortDateFormat := 'dd/mm/yyyy'; end; procedure TDemoForm.TreeViewCompare(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer); var d1, d2: TDate; begin d1 := StrToDate('01/' + Copy(Node1.Text, 1, 7), fs); d2 := StrToDate('01/' + Copy(Node2.Text, 1, 7), fs); Compare := CompareDate(d1, d2); end; procedure TDemoForm.ButtonClick(Sender: TObject); begin TreeView.AlphaSort(False); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz