Sortowanie ListView. Czy jest jakiś inny sposób???

0

Witam.

Znalazłem takie coś na forum:

var
ASC: Boolean;
ColumnToSort: Integer;

procedure TGlowna.ColumnClick(Sender: TObject;
Column: TListColumn);
begin
ASC := not ASC;
ColumnToSort := Column.Index;
(Sender as TCustomListView).AlphaSort;
end;

procedure TGlowna.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
ix: Integer;
begin
if ASC then
begin
if ColumnToSort = 0 then
Compare := CompareText(Item1.Caption,Item2.Caption)
else
begin
ix := ColumnToSort - 1;
if (ColumnToSort = 2) then
Compare := StrToInt(Item1.SubItems[ix]) - StrToInt(Item2.SubItems[ix])
else
Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
end;
end
else
begin
if ColumnToSort = 0 then
Compare := CompareText(Item2.Caption,Item1.Caption)
else
begin
ix := ColumnToSort - 1;
if (ColumnToSort = 2) or (ColumnToSort = 3) then
Compare := -(StrToInt(Item1.SubItems[ix]) - StrToInt(Item2.SubItems[ix]))
else
Compare := CompareText(Item2.SubItems[ix],Item1.SubItems[ix]);
end;
end;
end;

Czy jest jakiś inny sposób i lepszy???

THX

0

Czy jest jakiś inny sposób i lepszy???

Lepszy? Tzn. jaki? Jakie chcesz sortowanie (tzn. warunek).

0

Mam ListBox-a z 5 kolumnami. W jednych są String-i a w drugich Intiger-y. w niektórych ich pozycjach są puste pola (brak jakiego kolwiek znaku) i po naciśnięciu kolumny wyskakuja błedy.

0

Sprawdzaj kolumnę i sortuj inaczej dla każdej. Przeanalizuj ten kod i pomyśl chwilę. Jest tam takie coś jak ColumnToSort. To nie jest kod uniwersalny.

0

Spróbuj tego:

var
SortedColumn: Integer;
Descending: Boolean;

procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
TListView(Sender).SortType := stNone;
if Column.Index SortedColumn then
begin
SortedColumn := Column.Index;
Descending := False;
end
else
Descending := not Descending;
TListView(Sender).SortType := stText;
end;

procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin

if SortedColumn = 0 then
Compare := CompareText(Item1.Caption, Item2.Caption)
else if SortedColumn > 0 then
Compare := CompareText(Item1.SubItems[SortedColumn-1],
Item2.SubItems[SortedColumn-1]);
if Descending then Compare := -Compare;

end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1