Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView "abhängig" sortieren (https://www.delphipraxis.net/17250-listview-abhaengig-sortieren.html)

Yheeky 1. Mär 2004 20:18


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

DelphiDeveloper 1. Mär 2004 20:34

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:
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;
für dich hier interessant das handling fuer die 5te und 6te spalte
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

Yheeky 1. Mär 2004 20:49

Re: ListView "abhängig" sortieren
 
Mhmm, irgendwie rutscht da immer noch ein Datum dazwischen, was da nicht hingehört... :(

DelphiDeveloper 1. Mär 2004 21:09

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:
Datum       Zeit
10.10.03     23:00
11.04.04     17:00
05.03.03     19:00
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

ich meine bei mir funzt es! oder etwa nicht?

Yheeky 2. Mär 2004 15:05

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