Autor Beitrag
T.E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win RT, Win 7 Pro, Win 8 Pro
Delphi 2009 Enterprise, Delphi XE, Delphi XE2
BeitragVerfasst: Do 11.08.11 09:54 
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:
ausblenden volle Höhe Delphi-Quelltext
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
  //Texte zuweisen
  if ColumnToSort = 0 then
  begin
    TextToSort1 := Item1.Caption;
    TextToSort2 := Item2.Caption;
  end else
  //if ColumnToSort = 0 then
  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;
  //if SortDir <> 0 then
  //Texte je nach Tag der Spalte unterschiedlich vergleichen
  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
    //3
    //Alles andere sind Strings
    Compare := CompareText(TextToSort1, TextToSort2);
  end;
end;


OnColumnClick
ausblenden 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! =)

_________________
Schöne Grüße,
Torben
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 11.08.11 10:36 
Naja, ColumnToSort usw. setzen, AlphaSort aufrufen, fertig. :gruebel:
Natürlich nach dem Laden der Daten.