Рассмотрим сортировку на клиенте, на примере своего проекта
Для этого, нужно у каждой колонки грида включить параметр Sortable в True
А также обработать следующее событие грида (на примере FireDAC)
procedure TAdminUsersFrameAll.DBGridColumnSort(Column: TUniDBGridColumn; Direction: Boolean);
begin
if Direction then
qUsers.IndexFieldNames := Column.FieldName
else
qUsers.IndexFieldNames := Column.FieldName + ':D';
end;
У меня FireDAC, и поэтому все работает довольно просто )))