Moin moin,
das ist vermutlich nur eine Denkblockade bei mir, aber ich hab gerade absolut keine Idee, wie ich mein ListView beim Start/von vornherein nach der zweiten Spalte sortiere.
Also ich habe ein ListView mit drei Spalten in denen diverse Werte stehen. Nun möchte ich, das nicht standardmäßig nach der ersten Spalte sortiert wird, sondern nach der zweiten.
Klar ich könnte das ganze auch per OnColumnClick machen, das habe ich auch, aber die User möchten standardmäßig das halt die zweite Spalte absteigend sortiert ist und per OnColumnClick nur im "Ausnahmefall" die anderen sortieren.
OnCompare:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| procedure TMain_Form.Filelist_Grid_SchnittFertigCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); begin FileListOnCompare(Sender, Item1, Compare, Item2); end;
procedure TMain_Form.FileListOnCompare(Sender: TObject; Item1: TListItem; var Compare: Integer; Item2: TListItem); var TextToSort1: string; TempStr: string; 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 SortDir <> 0 then begin TempStr := TextToSort1; TextToSort1 := TextToSort2; TextToSort2 := TempStr; end; case (Sender as TListView).Columns[ColumnToSort].Tag of 1: Compare := StrToIntDef(TextToSort1, 0) - StrToIntDef(TextToSort2, 0); 2: begin Compare := 0; if StrToFloat(TextToSort1) > StrToFloat(TextToSort2) then Compare := Trunc(StrToFloat(TextToSort1) - StrToFloat(TextToSort2)) + 1; if StrToFloat(TextToSort1) < StrToFloat(TextToSort2) then Compare := Trunc(StrToFloat(TextToSort1) - StrToFloat(TextToSort2)) - 1; end; 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; else Compare := CompareText(TextToSort1, TextToSort2); end; end; |
OnColumnClick
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TMain_Form.Filelist_Grid_SchnittFertigColumnClick(Sender: TObject; Column: TListColumn); begin SortFileListColumns(Sender, Column); end;
procedure TMain_Form.SortFileListColumns(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; |
Ich hoffe ihr könnt mir bei meiner Denkblockade helfen. Besten Dank im voraus! =)