hallo,
ich habe eine ListView auf meinem Form und diese möchte ich gerne sortieren, wenn ich auf die Spaltenüberschrift klicke.
Ich hab hier schon jede Menge gefunden, hab es ausprobiert und es klappt einfach nicht.
Also ein Klick auf die Spaltenüberschrift: da habe ich das gefunden
Delphi-Quellcode:
procedure TMainForm.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
ColumnToSort := Column.Index;
if ColumnToSort = LastSorted then
SortDir := 1 - SortDir
else
SortDir := 0;
LastSorted := ColumnToSort;
(Sender as TCustomListView).AlphaSort;
end;
Dann hab ich eine Sortierroutine gefunden:
Delphi-Quellcode:
procedure TMainForm.ListView1Compare(Sender: TObject; Item1,Item2: TListItem; Data: Integer; var Compare: Integer);
var
TempStr, TextToSort1, TextToSort2: String;
begin
if ColumnToSort = 0 then
begin
TextToSort1 := Item1.Caption;
TextToSort2 := Item2.Caption;
end
else
begin
TextToSort1 := Item1.SubItems[ColumnToSort - 1];
TextToSort2 := Item2.SubItems[ColumnToSort - 1];
end; //if ColumnToSort <> 0 then
//Je nach Sortierrichtung evtl. Texte vertauschen
if SortDir <> 0 then
begin
TempStr := TextToSort1;
TextToSort1 := TextToSort2;
TextToSort2 := TempStr;
end;
//Texte je nach Tag der Spalte unterschiedlich vergleichen
case (Sender as TListView).Columns[ColumnToSort].Tag of
//Integer-Werte
1: Compare := StrToInt(TextToSort1)-StrToInt(TextToSort2);
//DateTime-Werte
3: begin
Compare := 0;
if StrToDateTime(TextToSort1) > StrToDateTime(TextToSort2) then
Compare := Trunc(StrToDateTime(TextToSort1)-StrToDateTime(TextToSort2))+1;
if StrToDateTime(TextToSort1) < StrToDateTime(TextToSort2) then
Compare := Trunc(StrToDateTime(TextToSort1)-StrToDateTime(TextToSort2))-1;
end;
end;
end;
Aber wie packe ich das jetzt zusammen, so dass ListView1Compare ausgeführt wird, wenn ich auf die spaltenüberschrift geklickt habe?