Kürzer (jedoch ungetestet)
Code: Alles auswählen
procedure TFPlz.Grid1TitleClick(Column: TColumn);
begin
if dmplz.sqlPlz.State = dsbrowse then begin
dmplz.sqlPlz.SortedFields := grid1.Columns.Items[column.Index].FieldName;
If dmplz.sqlPlz.SortType = stDescending Then dmplz.sqlPlz.SortType := stAscending Else dmplz.sqlPlz.SortType := stDescending;
dmplz.sqlPlz.First;
end;
end;
Erklärung: Deine zwei geschachtelten Case Of sind überflüssig.
In deinem äusseren Case Of prüfst du ob der Wert in SortedField derselbe ist wie der Feldname der Spalte. Wozu?
Im inneren Case Of setzt du nämlich jedesmal SortedField auf den Feldnamen der geclickten Spalte, egal in welchem Ast der Case Of's du bist
Bedeutet:
dmplz.sqlPlz.SortedFields := grid1.Columns.Items[column.Index].FieldName;
wird IMMER ausgeführt.
Dasselbe für die Umkehrung von SortType.
Bin mir nicht einmal sicher, ob der Code das macht, was du willst.
Du hast auf zweite Spalte geclickt, und sortierst aufsteigend. Du clickst nochmal drauf, und es sortiert absteigend.
Du clickst auf Spalte 4, und es sortiert AUFSTEIGEND, weil der letzte SortType absteigend war.
Denk nochmal darüber nach ob es das ist was du willst.
Könnte mir vorstellen, dass immer wenn zum ersten Mal auf eine Spalte geclickt wird, IMMER aufsteigend sortiert werden soll, egal welcher SortType vorher war.
EDIT: Und im Vergleich zum ersten Post setzt du jetzt im letzten Versuch nirgends das Tag (falls du das überhaupt brauchst).
Weil wenn ich deinen ersten Post lese, ist es eigentlich genau das, was ich oben im letzten Satz gemeint habe
Code: Alles auswählen
procedure TFPlz.Grid1TitleClick(Column: TColumn);
begin
if dmplz.sqlPlz.State = dsbrowse then begin
dmplz.sqlPlz.SortedFields := grid1.Columns.Items[column.Index].FieldName;
if grid1.Columns.Items[column.Index].Tag=0 then begin
dmplz.sqlPlz.SortType:=stDescending;
grid1.Columns.Items[column.Index].Tag:=1;
end
else begin
dmplz.sqlPlz.SortType:=stAscending;
grid1.Columns.Items[column.Index].Tag:=0;
end;
dmplz.sqlPlz.First;
end;
end;
Könnte man wahrscheinlich noch weiter abkürzen mit einem
grid1.Columns.Items[column.Index].Tag:=BoolToInt(Not IntToBool(Integer(dmplz.sqlPlz.SortType))); (oder so ähnlich. Spinne nur gerade etwas herum)
so dass man nur das setzen des SortType innerhalb des If-Then-Else hat