Страница 1 из 1

rxDBGrid: сортировка без сортировки (решено)

СообщениеДобавлено: 18.03.2014 17:52:52
zoltanleo
Использую UIB и rxDBGrid из последнего транка

Пытаюсь реализовать сабж
Код: Выделить всё
procedure TForm1.RxDBGridTitleClick(Column: TColumn);
var
  Col: TRxColumn;
  i: Integer;
  ColSortMarkState: TSortMarker;
begin
  RxDBGrid.BeginUpdate;
  Col:= (Column as TRxColumn);

  if not (ssCtrl in GetKeyShiftState) then
      begin
        ColSortMarkState:= Col.SortOrder;
        for i:= 0  to Pred(RxDBGrid.Columns.Count) do
          (RxDBGrid.Columns[i] as TRxColumn).SortOrder:= smNone;

        Col.SortOrder:= ColSortMarkState;
      end;

  case Col.SortOrder  of
    smNone: Col.SortOrder:= smUp;
    smDown: Col.SortOrder:= smNone;
      smUp: Col.SortOrder:= smDown;
  end;

  RxDBGrid.EndUpdate;
end;

Вот только SortPosition не удается отрисовать. Есть какой другой способ?

зы. Сортировка данных через грид не устраивает по некоторым причинам.

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 19.03.2014 10:03:53
vada
А средствами SQL сортировать не? ORDER BY

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 19.03.2014 15:27:38
zoltanleo
vada писал(а):А средствами SQL сортировать не? ORDER BY


в том-то и дело, что порядок сортировки важен, отсюда и потребность в SortPosition (хотя можно, конечно, через Column.FieldName или Column.Index подобраться, только придется через глобальный TStringList все реализовывать, что некомильфо).

зы. начал было править исходники стандартного грида, но там столько работы - времени жалко. Хотелось бы в сжатые сроки перевести проект с дельфей, а я все топчусь на месте :cry:

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 19.03.2014 20:19:50
alexs
А событие OnGetBtnParams не поможет?

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 20.03.2014 12:56:15
zoltanleo
alexs писал(а):А событие OnGetBtnParams не поможет?


Переменные другие, а код фактически тот же. Да, еще и грид жутко мерцает, если не выставить RxDBGrid.EndUpdate(False) и не проверить IsDown. В результате, SortPosition все равно на титлах не отображается, хоть вручную рисуй Изображение

зы. Алексей, а нельзя ли в исходниках на самые неочевидные свойства и процедуры хотя бы краткие комменты оставлять? Про полноценную справку я уж молчу Изображение

зыы. в демках c AutoSort и RxDBGrid сам грид очень мерцает, причем проект второго из них компилится через раз.

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 20.03.2014 14:41:20
alexs
насчет коментов - по русски не ставлю очевидно почему. а по англицки - боюсь опозориться :-).

Мерцание я замечал при включенных линиях от данных к итогам. Еще не придумал как поправить.

Насчет твоей проблемы - сделай мелкий пример. Подумаем.

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 20.03.2014 16:14:32
zoltanleo
alexs писал(а):Насчет твоей проблемы - сделай мелкий пример. Подумаем.


в аттаче. Базу (firebird) в архив пихать не стал ( больше 2 метров), вместо нее положил скрипт. Если нужны уточнения - спрашивай. Спасибо за внимание к моим нуждам :D

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 28.03.2014 10:34:16
alexs
Если я правильно понял - посмотри мой пример.

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 04.04.2014 19:13:53
zoltanleo
alexs писал(а):посмотри мой пример.

Нет, Алексей, циферек нету

Изображение

Нужен аналог этого

Изображение

зы. ты не против, если я в твоих исходниках поковыряюсь?

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 07.04.2014 17:57:29
zoltanleo
Ура, получилось после небольшой правки исходников. Алексей, глянь личку, плз !

Изображение

Re: rxDBGrid: сортировка без сортировки

СообщениеДобавлено: 09.04.2014 22:17:59
alexs
Изменения принял, с небольшими замечаниями. Отписал в личке.

Re: rxDBGrid: сортировка без сортировки (решено)

СообщениеДобавлено: 31.10.2018 14:41:13
V@S
Побуду некромантом :)
А для чего после переоткрытия набора данных очищается список SortField?
Не логично как-то, если запрос в датасете изменится, так и колонки в гриде должны тогда измениться. Может стоит его очищать только в случае удаления или добавления колонок грида?

Re: rxDBGrid: сортировка без сортировки (решено)

СообщениеДобавлено: 01.11.2018 11:33:57
alexs
Проблема в том, что после переоткрытия датасета полей может и не быть.

Re: rxDBGrid: сортировка без сортировки (решено)

СообщениеДобавлено: 01.11.2018 17:58:28
V@S
Так если в дизайнере колонки добавить, то при переоткрытии набора данных они никуда не денутся. Соответственно, если в датасете не будет нужных полей, то это уже совсем другое исключение, нежели сортировка.
Не надо же после переоткрытия автоматически сортировать, задача не в этом. Задача в том чтобы не убирать метки на полях, а как уже сортировать для пользователя по меткам дело каждого. Во многих случаях лучше сразу отдать запрос серверу с нужными полями, чем применять локальную сортировку. Потому что есть компоненты доступа которые не тянут весь набор данных на клиента, а подтягивают по мере прокрутки. У меня не получалось отсортировать локально правильно, используя ограничение на выбор в компонентах (FetchRow). Сортируется почему-то только пришедшая от сервера часть. Приходится писать в запросах поля для сортировки при переоткрытии.

Да и говорить, что клиенты мощны как серверы, можно, но самое слабое место это сеть, а не компы. Потому и придумали SQL, чтобы отдать сразу нужное кол-во данных, а не гонять как дбф целиком таблицы по сети.

Компоненты классные, спасибо за труды!!!

Re: rxDBGrid: сортировка без сортировки (решено)

СообщениеДобавлено: 02.11.2018 11:52:31
alexs
V@S писал(а):Соответственно, если в датасете не будет нужных полей, то это уже совсем другое исключение, нежели сортировка.

Это надо специально обрабатывать. Для меня не критично - нет времени дописывать.
V@S писал(а):У меня не получалось отсортировать локально правильно, используя ограничение на выбор в компонентах (FetchRow)

Это естественно - сортируются только те данные, которые выбраны на клиенты. Компонента не знает - что на сервере ещё что-то осталось.

Если есть желание что-то доработать - давай код. Включу в исходники.