powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ehlib сортировка по нажатию титула столбца
16 сообщений из 16, страница 1 из 1
Ehlib сортировка по нажатию титула столбца
    #39920405
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Как в Ehlib сделать сортировка по нажатию титула столбца.
Delphi 7 база на Oracle соединяюсь компонентой ODAC.

Топики https://sql.ru/forum/101948 https://sql.ru/forum/177525 https://sql.ru/forum/115329 читал.

Стрелочка выходить нажимаю стрелка меняется, но сортировка не получается.
Думаю из-за того что у меня связь с БД через ODAC. На примерах через BDE, ADO.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920435
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как сделал то ?
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920440
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в настройках грида включи сортировку, установи локальную сортировку, подключи memTable. вроде как с другими датасетами работать не будет
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920451
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
вроде как с другими датасетами работать не будет

Работает с другими. Нужно включить некоторые модули в uses и всё.
На счет одак - не помню, если в дефолтной поставке.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920469
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustam Ergashev
Delphi 7 база на Oracle соединяюсь компонентой ODAC.
EhLib какой версии?
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920493
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. В OptionsEh включиль AutoSortMarking MultiSortMarking
2. В свойствах столбца включиль TitleButton
и тогдали
Кроме курсора нечего не изменился а потом
авторв настройках грида включи сортировку, установи локальную сортировку, подключи memTable. вроде как с другими датасетами работать не будет
По примеру сделал с memTable тоже результатов не дал.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920494
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EhLib 5.0 Beta Build 5.0.02 наверно вот этот. Код работал и работает, заказчик захотел сортировку по столбцу, вот и я решил сделать по простому. Но с первого раза не получилось.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920507
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Найди и подключи (uses) модуль EhLibODAC.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920520
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://www.sql.ru/forum/199636/sortirovka-v-ehlib
отсюда взял пример и восползовался
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TNaselPunkty.DBGridEh1TitleBtnClick(Sender: TObject;
  ACol: Integer; Column: TColumnEh);
begin
 if Column.Title.SortMarker=smDownEh
  then
   begin
    ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).setorderby(column.FieldName);
    if ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Active
     then ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Refresh
     else ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).open;
     Column.Title.SortMarker:=smUpEh;
   end
  else
   begin
    ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).SetOrderBy(column.FieldName+' DESC');
    if ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Active
     then ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).Refresh
     else ((sender as TDBGridEh).DataSource.DataSet as TORAQuery).open;
     Column.Title.SortMarker:=smDownEh;
   end;
end;


Сортироват получается только раз стрелка верх показывает и так остаётся, больше не реагирует на нажатие стрелки в столбце
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920521
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustam Ergashev,
тебе ведь написали, что нужно делать.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920554
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я ишу уже, я просто ответил на ране заданному вопросу
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920892
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RzButton, DB, DBAccess, Ora, MemDS, OraTransaction, GridsEh,
  DBGridEh, OraSmart, StdCtrls, DBCtrls, Mask, DBCtrlsEh, ComObj, EhLibODAC;



подключил
EhLibODAC
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
unit EhLibODAC;

{$I EhLib.Inc}

interface

uses
  DbUtilsEh, DB, sysutils, DBGridEh, Ora, OraSmart;

implementation

uses Classes;

function ODACDataSetDriverName(DataSet: TOraDataSet): String;
begin
  Result := 'ORACLE';
end;

function DateValueToODACSQLStringProc(DataSet: TDataSet; Value: Variant): String;
begin
  Result := DateValueToDataBaseSQLString(ODACDataSetDriverName(TOraDataSet(DataSet)), Value)
end;

procedure SortDataInODACDataSet(Grid: TCustomDBGridEh; DataSet: TOraDataSet);
var
  s: String;
  i: Integer;
begin
  s := '';
  for i := 0 to Grid.SortMarkedColumns.Count - 1 do
  begin
    s := s + IntToStr(DataSet.FieldByName(Grid.SortMarkedColumns[i].FieldName).Index+1);
    if Grid.SortMarkedColumns[i].Title.SortMarker = smUpEh
      then s := s + ' DESC,'
      else s := s + ',';
  end;
  //DataSet.Sort := Copy(s, 1, Length(s) - 1);
    if DataSet.Active then begin
      //DataSet.Close;
      DataSet.SetOrderBy(Copy(s, 1, Length(s) - 1));
      DataSet.Open;
    end
    else DataSet.SetOrderBy(Copy(s, 1, Length(s) - 1));
end;

type

  TODACSQLDatasetFeaturesEh = class(TSQLDatasetFeaturesEh)
  public
    procedure ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
    procedure ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
    constructor Create; override;
  end;

  TODACTableSQLDatasetFeaturesEh = class(TDatasetFeaturesEh)
  public
    procedure ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
    procedure ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
  end;


//implementation

{ TODACSQLDatasetFeaturesEh }

procedure TODACSQLDatasetFeaturesEh.ApplyFilter(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
begin
  if TDBGridEh(Sender).STFilter.Local
   then DataSet.Filter := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsLocalFilterString, nil)
  else (DataSet as TOraDataSet).FilterSQL := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsSQLWhereString, DateValueToODACSQLStringProc, True)
end;

procedure TODACSQLDatasetFeaturesEh.ApplySorting(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
begin
  if Sender is TCustomDBGridEh then
    if TCustomDBGridEh(Sender).SortLocal then
      SortDataInODACDataSet(TCustomDBGridEh(Sender), TOraDataSet(DataSet))
    else
      inherited ApplySorting(Sender, DataSet, IsReopen);
end;

constructor TODACSQLDatasetFeaturesEh.Create;
begin
  inherited Create;
  DateValueToSQLString := DateValueToODACSQLStringProc;
  SupportsLocalLike := True;
end;

{ TODACTableSQLDatasetFeaturesEh }

procedure TODACTableSQLDatasetFeaturesEh.ApplyFilter(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
begin
  if TDBGridEh(Sender).STFilter.Local
   then DataSet.Filter := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsLocalFilterString, nil)
   else (DataSet as TOraDataSet).FilterSQL := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsSQLWhereString, DateValueToODACSQLStringProc, True)
end;

procedure TODACTableSQLDatasetFeaturesEh.ApplySorting(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
var
  i: Integer;
  sOrderFields: String;
begin
  If Sender is TCustomDBGridEh then
   With TCustomDBGridEh(Sender) do
    begin
     sOrderFields := '';
     If SortMarkedColumns.Count>0 then
      For i := 0 to SortMarkedColumns.Count - 1 do
       begin
        sOrderFields := sOrderFields + SortMarkedColumns[i].FieldName;
        If SortMarkedColumns[i].Title.SortMarker = smUpEh then
         sOrderFields := sOrderFields + ' DESC';
        sOrderFields := sOrderFields + ','
      end;
     Delete(sOrderFields,Length(sOrderFields),1);
     (DataSet as TOraTable).OrderFields := sOrderFields;
    End
end;

initialization
  RegisterDatasetFeaturesEh(TODACSQLDatasetFeaturesEh, TOraQuery);
  RegisterDatasetFeaturesEh(TODACTableSQLDatasetFeaturesEh, TOraTable);

end.

Выдаёт ошибку. Что то еще упустил.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920893
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только что заметил ощибку выдаёт но сортировку как то делает. Интересно в чем может быт проблема.
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920894
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это ошибка получаю даже при прокрутке колесика мышки
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39920937
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustam Ergashev,

EhLib у тебя с исходниками?
...
Рейтинг: 0 / 0
Ehlib сортировка по нажатию титула столбца
    #39921008
Rustam Ergashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F, да
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ehlib сортировка по нажатию титула столбца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]