Hi,
hiermit kann man ein Grid egal auf welche Spalte man klickt entweder Auf- oder Abwärts sortieren.
Die Variable vor der Prozedurendeklaration, soll nur bedeuten das die Var in einer Klasse, oder Global oder ins Privat z.B. sein sollte, es geht auch da wo sie jetzt ist, sie darf nur nicht in der Prozedur sein, sonst ist es 1. nicht initialisiert und 2. könnte man sich sonst nie den letzten Wert speichern.
In der Zeile(ADODataSet1.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn
ist das ASC nicht nötig das dies schon der Standardwert von Order ist.
Delphi-Quellcode:
var
bSortOrder: Boolean;
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
sSortColumn: String;
begin
sSortColumn := DBGrid1.Columns.Items[Column.Index].FieldName;
ADODataSet1.Close;
if bSortOrder then
begin
ADODataSet1.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn;
end
else
begin
ADODataSet1.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn + ' DESC';
end;
ADODataSet1.Open;
bSortOrder := not bSortOrder;
end;