Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - ListView nach Datum sortieren
Chatfix - Do 03.06.04 12:38
Titel: ListView nach Datum sortieren
Moin,
ich habe ein ListView und in der ersten Spalte (also Item.Caption) steht immer ein Datum im Format tt.mm.jjjj
Ich wollte nun das alle Items nach dem Datum sortiert werden hab aber keine Ahnung wie ich das anstellen könnte.
Vielleicht hat ja jemand sowas schonmal gemacht?!
Danke schonmal im vorraus!
Delete - Do 03.06.04 12:45
Titel: Re: ListView nach Datum sortieren
Wirklich immer
Chatfix hat folgendes geschrieben: |
im Format tt.mm.jjjj |
? Dann reicht IMHO ein simpler Stringvergleich.
Chatfix - Do 03.06.04 12:59
also bei mir würde er dann so sortieren:
01.05.2004
30.04.2004
anstatt
30.04.2004
01.05.2004
wahrscheinlich wird das format aber auf tt.mm. gekürzt, aber das problem ist das selbe
Delete - Do 03.06.04 13:31
Oh ja, stimmt. :oops:
Zitat: |
01.05.2004
30.04.2004 |
Also, eine einfache Möglichkeit fällt mir im Augenblick nicht ein. Umständlich wäre es wahrscheinlich, die Daten (Datumse ;)) mit "EncodeDate" umzuwandeln und dann als Zahlen zu vergleichen? Oder?
ErnestoChe - Do 03.06.04 13:49
Hallo,
voilà:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
function DateSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer; stdcall; begin Result := -CompareDate(StrToDate(Item1.Caption), StrToDate(Item2.Caption)); end;
begin case Column.Index of 0: ListView1.CustomSort(@DateSortProc, 0); end; end; |
MFG
- Ernesto -
Bronstein - Fr 13.10.06 16:14
Titel: in das On Compare ereignis einfügen
Wie kann ich diesen sortier Algorithmus in das OnCompare-Ereignis des Listviews einbauen. Bekomme es einfach nicht hin.
So funltioniert es nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TfrmPMJ.ListView2Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var ix: Integer; begin CompareDate(StrToDate(FormatDateTime('dd.mm.yyyy', StrToDateTime(Item1.Caption))), StrToDate(FormatDateTime('dd.mm.yyyy', StrToDateTime(Item2.Caption)))); end; |
Reinhard Kern - Sa 14.10.06 13:16
Titel: Re: in das On Compare ereignis einfügen
Bronstein hat folgendes geschrieben: |
Wie kann ich diesen sortier Algorithmus in das OnCompare-Ereignis des Listviews einbauen. Bekomme es einfach nicht hin.
So funltioniert es nicht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TfrmPMJ.ListView2Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var ix: Integer; begin CompareDate(StrToDate(FormatDateTime('dd.mm.yyyy', StrToDateTime(Item1.Caption))), StrToDate(FormatDateTime('dd.mm.yyyy', StrToDateTime(Item2.Caption)))); end; | |
Hallo,
erstens must du ja was tun, um etwas zu bewirken, in dem Fall must du die Variable Compare verändern. Da das Ergebnis von CompareDate passt, also Compare := CompareDate (...
zweitens, was soll der doppelte Aufruf von StrToDate und StrToDateTime? Beide arbeiten nach dem gleichen Grundsatz, mit der Umformatierung wird also nichts bewirkt, soweit ich sehen kann.
Gruss Reinhard
Bronstein - Di 17.10.06 14:28
Habe noch mal eine Frage.
Wie kann ich nach zwei Spalten sortieren. Nach der Ersten (Caption) und der Dritten. Bei der ersten handelt es sich um ein Datum bei der dritten um Text.
Nach jeweils einer Spalte habe ich es hinbekommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TfrmVDC.ListView2Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); begin Compare := CompareDateTime(StrToDateTime(Item1.Caption), StrToDateTime(Item2.Caption));
Compare := CompareText(Item1.SubItems[1], Item2.SubItems[1]); end; |
Wie bekomme ich es aber hin, dass er zuerst nach der ersten Spalte sortiert und als zweites Kriterium die dritte Spalte sortiert
Delete - Di 17.10.06 14:48
Aus dem Bauch raus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TfrmVDC.ListView2Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); begin Compare := CompareDateTime(StrToDateTime(Item1.Caption), StrToDateTime(Item2.Caption)); if Compare = 0 then Compare := CompareText(Item1.SubItems[1], Item2.SubItems[1]); end; |
Oder so ähnlich. ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!