Autor Beitrag
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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



BeitragVerfasst: Do 03.06.04 12:45 
Wirklich immer
Chatfix hat folgendes geschrieben:
im Format tt.mm.jjjj

? Dann reicht IMHO ein simpler Stringvergleich.
Chatfix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Do 03.06.04 13:49 
Hallo,

voilà:

ausblenden 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
      // Datum absteigend sortieren, falls aufsteigend erwünscht
      // minus-Zeichen weglassen
    Result := -CompareDate(StrToDate(Item1.Caption),
      StrToDate(Item2.Caption));
  end;

begin
   case Column.Index of
     0: ListView1.CustomSort(@DateSortProc, 0);
   end;
end;


MFG

- Ernesto -
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Sa 14.10.06 13:16 
Titel: Re: in das On Compare ereignis einfügen
user profile iconBronstein 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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.
ausblenden 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
//nach Datum (1.Spalte)
Compare := CompareDateTime(StrToDateTime(Item1.Caption), StrToDateTime(Item2.Caption));

//nach der 3 Spalte
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



BeitragVerfasst: Di 17.10.06 14:48 
Aus dem Bauch raus:
ausblenden 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
  //nach Datum (1.Spalte)
  Compare := CompareDateTime(StrToDateTime(Item1.Caption), StrToDateTime(Item2.Caption));
  if Compare = 0 then
  //nach der 3 Spalte
    Compare := CompareText(Item1.SubItems[1], Item2.SubItems[1]);
end;

Oder so ähnlich. ;)