Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сортировка в DBGridEh


3APA3A ©   (2004-08-25 23:23:00) 

Не знаю, в эту ветку или в "Базы", но
  Есть ли в DBGridEh встроенная сортировка, то есть шелкнул я по заголовку столбца - он отсортировал по этому столбцу и т.д.
  Само собой, я могу в самом запросе делать order by..., но интеерсно - можно ли без этого?


jack128   (2004-08-27 13:39:00) [1]

3APA3A ©   (26.08.04 10:30) [5]
to jack128
  В смысле - папки DataService

в этой папке {%EhLib_Root%}\DataService находится, в часности, вот этот юнит -
Карелин Артем ©   (27.08.04 13:00) [7]
uses EhLibIBX и все.


Карелин Артем   (2004-08-27 13:00:00) [2]

Народ, не туда вас понесло.
uses EhLibIBX и все.

В крайнем случае вручную зовем
procedure ApplySortingForSQLBasedDataSet(Grid: TCustomDBGridEh; DataSet: TDataSet;
  UseFieldName: Boolean; IsReopen: Boolean);

 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;

var
 i, OrderLine: Integer;
 s: String;
 SQL: TStrings;
begin
 if not IsSQLBasedDataSet(DataSet, SQL) then
   raise Exception.Create(DataSet.ClassName + ' is not SQL based dataset');

 s := '';
 for i := 0 to Grid.SortMarkedColumns.Count - 1 do
 begin
   if true
     then s := s + Grid.SortMarkedColumns[i].FieldName
     else s := s + IntToStr(Grid.SortMarkedColumns[i].Field.FieldNo);
   if Grid.SortMarkedColumns[i].Title.SortMarker = smUpEh
     then s := s + ' DESC, '
     else s := s + ', ';
 end;

 if s <> '' then
   s := 'ORDER BY ' + Copy(s, 1, Length(s) - 2);

 OrderLine := -1;
 for i := 0 to SQL.Count - 1 do
   if UpperCase(Copy(SQL[i], 1, Length('ORDER BY'))) = 'ORDER BY' then
   begin
     OrderLine := i;
     Break;
   end;
 if OrderLine = -1 then
 begin
   SQL.Add('');
   OrderLine := SQL.Count-1;
 end;

 SQL.Strings[OrderLine] := s;

 if IsReopen then
 begin
   DataSet.Close;
   DataSet.Open;
 end;
end;


Роман Снегирев   (2004-08-27 12:50:00) [3]

а индекс использовать не судьба? или переопределить запрос (в смысле ORDER BY)?


3APA3A   (2004-08-26 10:30:00) [4]

to YurikGL
   С этом обсуждении предполагается, что я использую FIBPlus. Но я использую IBX и у IBX нет метода DoSort()...
   Как быть?

 to jack128
   В смысле - папки DataService...


KSergey   (2004-08-26 07:56:00) [5]

Если компоненты доступа ADO - см. так же http://delphimaster.ru/cgi-bin/forum.pl?id=1092390543&n=1


jack128   (2004-08-26 00:10:00) [6]

есть. см содержимое папки DataService


YurikGL   (2004-08-25 23:32:00) [7]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1093442653&n=1


YurikGL   (2004-08-25 23:31:00) [8]

Обрабатываешь onclick и вперед.
Кстати, ИМХО контекстное меню удобнее реализовывать


Наверх

Титульная страница Поиск, карта сайта Написать письмо