Я сделал свой класс на основе 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;
Весь код компонента не выкладываю, но принцип должен быть понятен
как вариант, но я обычно правлю исходник... правда при обновлении компонент приходится заново все вносить =)