Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сортировка в DBGridEh


Автор: gray_k 17.7.2003, 12:10
Есть IBQyery. Визуальный компонент - DBGridEh. Знаю что в нём можно сделать сортировку при клике мышкой по заголовку столбца. А вот как это сделать?

Автор: Akella 21.7.2003, 08:13
Нужно писать обработку события OnTitleClick. Там есть параметр Column. И вот если Column = 0, т.е. пользователь кликнул на первом столбце, то сортируем таблицу по этому полю, выводим маркер сортировки(как его показать, я не помню), посмотри Demo, там есть.
Причем, обрати внимание на свойство столбца (дважды кликни на сетке). В каком-то свойстве (типа Style), нужно установить свойство в Button(кнопка), иначе столбец не будет реагировать на клик. А может это свойство прямо в таблице(а не в столбце). К сожалению на этот момент, у меня нет с собой конкретного примера, но если желаешь попоже я здесь его скину.

Автор: Medved 27.7.2003, 08:11
Нет, все гораздо проще, надо просто посмотреть примеры, поставляеммые с библиотекой. А в третьей версии это все реализовано автоматом.

Вот код:

Код

procedure TForm1.DBGridEh1SortMarkingChanged(Sender: TObject);
var i: Integer;
 s: string;
 function DeleteStr(str: string; sunstr: string): string;
 var i: Integer;
 begin
   i := Pos(sunstr, str);
   if i <> 0 then Delete(str, i, Length(sunstr));
   Result := str;
 end;
begin
 if Query1.Active then begin
   s := '';
   for i := 0 to DBGridEh1.SortMarkedColumns.Count - 1 do
     if DBGridEh1.SortMarkedColumns[i].Title.SortMarker = smUpEh then
       s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ' DESC , '
     else
       s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ', ';
   if s <> '' then s := ' ORDER BY ' + Copy(s, 1, Length(s) - 2);
   s := DeleteStr(s, '1');

   Query1.SQL.Strings[Query1.SQL.Count - 1] := s;
 
   Query1.Close;
   Query1.Open;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)