Autor |
Beitrag |
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Do 03.06.04 12:38
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!
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 03.06.04 12:45
Wirklich immer
Chatfix hat folgendes geschrieben: | im Format tt.mm.jjjj |
? Dann reicht IMHO ein simpler Stringvergleich.
|
|
Chatfix 
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: 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
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 03.06.04 13:31
Oh ja, stimmt.
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
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: 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
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: 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; |
_________________ Es gibt keine dummen Fragen nur dumme Antworten!!!
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: 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
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: 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
_________________ Es gibt keine dummen Fragen nur dumme Antworten!!!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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. 
|
|