Я сделал свой класс на основе TDBGridEh, и добавил процедурку:
Код:
procedure TKDBGridEx.SortColumn(aColumn: TColumnEh;
aSortMarker: TSortMarkerEh; MultiSort: boolean);
//var i : integer;
procedure ClearColSorting;
var
i : integer;
begin
if not (MultiSort) then begin
//если мультисортировка не разрешена - снимаем сортировку со всех колонок
for I := 0 to Columns.Count - 1 do
if (Columns[i].Title.SortMarker <> smNoneEh) then
Columns[i].Title.SortMarker := smNoneEh;
end;
end;
begin
if aColumn.Title.SortMarker <> smNoneEh then begin
//если колонка отсортирована
if ((aSortMarker = smUpEh) and ( aColumn.Title.SortMarker = smUpEh))
or((aSortMarker = smDownEh) and ( aColumn.Title.SortMarker = smDownEh))
then begin
//если направление сортировки и клавиша совпадают
ClearColSorting;
DoSortMarkingChanged;
exit;
end else begin
ClearColSorting;
aColumn.Title.SortMarker := aSortMarker;
DoSortMarkingChanged;
exit;
end;
end else begin
//если колонка еще не отсортирована
ClearColSorting;
aColumn.Title.SortMarker := aSortMarker;
DoSortMarkingChanged;
exit;
end;
end;
Весь код компонента не выкладываю, но принцип должен быть понятен