Einzelnen Beitrag anzeigen

DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: ListView "abhängig" sortieren

  Alt 1. Mär 2004, 20:34
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
  Mit Zitat antworten Zitat