![]() |
ListView "abhängig" sortieren
Hi,
also ich habe eine ListView, die sowohl eine Datum- und ein Uhrzeitspalte hat. Beim Sortieren sollen diese beiden Spalten "abhängig" sein. Beispiel: Ich sortiere die ListView nach dem aktuellen Datum. Wenn ich nun die Uhrzeit sortieren will, soll nicht nur die Uhrzeit berücksichtig werden, sondern die Datumsortierung soll immer noch aktuell sein. Wie kann man das mit Code bewerkstelligen oder gibt´s dafür sogar eine Einstellmöglichkeit? Gruß Yheeky |
Re: ListView "abhängig" sortieren
ich hatte sowas auch mal gebraucht und ich habe folgendes gemacht
1. globale variablen sortcol: integer; ascending_sort: boolean; 2 dann schreibst du folgende events im listview
Code:
für dich hier interessant das handling fuer die 5te und 6te spalte
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer); var hItem: TListItem; begin // swap items hier vertausche ich jenachdem die itemns fuer einaml auf und dann ab if ascending_sort then begin hItem := Item1; Item1 := Item2; Item2 := hItem; end; case SortCol of 0: begin // nothing to do end; 1: // string begin Compare := CompareStr(Item1.SubItems[SortCol - 1], Item2.SubItems[SortCol - 1]); end; 2: //string begin Compare := CompareStr(Item1.SubItems[SortCol - 1], Item2.SubItems[SortCol - 1]); end; 3: //integer begin Compare := (StrToInt(Item1.SubItems[SortCol - 1]) - StrToInt(Item2.SubItems[SortCol - 1])); end; 4: //currency begin Compare := Trunc((StrToCurr(Item1.SubItems[SortCol - 1]) * 100) - (StrToCurr(Item2.SubItems[SortCol - 1]) * 100)); end; *) 5: //Datum + Zeit begin Compare := trunc(((StrToDate(Item1.SubItems[SortCol - 1]) + StrToTime(Item1.SubItems[SortCol])) * 10000) - ((StrToDate(Item2.SubItems[SortCol - 1]) + StrToTime(Item2.SubItems[SortCol])) * 10000)); end; 6: //Zeit begin Compare := Trunc(StrToTime(Item1.SubItems[SortCol - 1]) * 10000 - StrToTime(Item2.SubItems[SortCol - 1]) * 10000); end; end; //case end; vorsicht mit meinem [SortCol - 1] bei click auf 0.te spalte gibts natuerlich eins auf die muetze
Code:
// wir merken uns welche column geclickt wurde
procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin SortCol := Column.Index; ListView1.AlphaSort; ascending_sort := not ascending_sort; end; wenn du auf auf/ab verzichten willst kannste auch auf SortCol verzichten und nimmst oben bezug auf Column.index |
Re: ListView "abhängig" sortieren
Mhmm, irgendwie rutscht da immer noch ein Datum dazwischen, was da nicht hingehört... :(
|
Re: ListView "abhängig" sortieren
das muesste es doch eigentlich tun oder?
Code:
5: //Datum + Zeit
begin Compare := trunc(((StrToDate(Item1.SubItems[SortCol - 1]) + StrToTime(Item1.SubItems[SortCol])) * 10000) - ((StrToDate(Item2.SubItems[SortCol - 1]) + StrToTime(Item2.SubItems[SortCol])) * 10000)); ich habe 2 spalten in meinem listview
Code:
im grid selber stehen strings also konvertieren wir mit StrToDate das Datum und StrtoTime die zeit * faktor 10000 um den anteil ein bißchen hoeher zu gewichten
Datum Zeit
10.10.03 23:00 11.04.04 17:00 05.03.03 19:00 ich meine bei mir funzt es! oder etwa nicht? |
Re: ListView "abhängig" sortieren
Ne, also bei mir funktioniert das nicht so wirklich. Muss ich da vielleicht noch was besonderes beachten?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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