ich stehe irgendwie auf dem Schlauch.
Gegeben ist ein StringGrid mit drei Spalten.
Die erste Spalte enthält nur integer Werte.
die zweite und dritte Spalte nur Text
Ich möchte nun auf die Spaltenheader klicken und so die zeilen im grid sortieren.
Das funktioniert grundsätzlich korrekt, wenn ich
Code: Alles auswählen
StringGrid1.ColumnClickSorts:=true;setze
Alle drei Spalten lassen sich sortieren.
Da die erste Spalte numerisch sortiert werden soll, habe ich eine OnCompareCells Methode geschrieben, die die erste Spalte numerisch sortieren soll, und die anderen beiden alphabetisch sortieren soll.
Code: Alles auswählen
procedure TForm1.StringGrid1CompareCells(Sender: TObject; ACol, ARow, BCol,
BRow: Integer; var Result: integer);
var
v1, v2: Integer;
s1, s2: string;
begin
if ACol = 0 then // Spalte 0 numerisch
begin
v1 := StrToIntDef(StringGrid1.Cells[ACol, ARow], 0);
v2 := StrToIntDef(StringGrid1.Cells[BCol, BRow], 0);
if v1 < v2 then Result := -1
else if v1 > v2 then Result := 1
else Result := 0;
end
else // Alle anderen Spalten alphabetisch, ohne Berücksichtigung von Groß/Klein
begin
s1 := StringGrid1.Cells[ACol, ARow];
s2 := StringGrid1.Cells[BCol, BRow];
Result := CompareText(s1, s2); // Case-insensitive
end;
end; Jede Spalte lässt sich genau einmal sortieren. Also mehrmals auf den gleichen Spaltenheader klicken und damit rauf- bzw. runter zu sortieren, funktioniert nicht.
Kann mir jemand weiterhelfen?
Demo-Programm im Anhang.
Fritz
Lazarus 4.2
Windows 11