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

Модераторы: alexs, Модераторы

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

Сообщение zoltanleo » 18.03.2014 17:52:52

Использую 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 не удается отрисовать. Есть какой другой способ?

зы. Сортировка данных через грид не устраивает по некоторым причинам.
Последний раз редактировалось zoltanleo 10.04.2014 10:19:32, всего редактировалось 1 раз.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

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

Сообщение vada » 19.03.2014 10:03:53

А средствами SQL сортировать не? ORDER BY
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

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

Сообщение zoltanleo » 19.03.2014 15:27:38

vada писал(а):А средствами SQL сортировать не? ORDER BY


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

зы. начал было править исходники стандартного грида, но там столько работы - времени жалко. Хотелось бы в сжатые сроки перевести проект с дельфей, а я все топчусь на месте :cry:
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

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

Сообщение alexs » 19.03.2014 20:19:50

А событие OnGetBtnParams не поможет?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение zoltanleo » 20.03.2014 12:56:15

alexs писал(а):А событие OnGetBtnParams не поможет?


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

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

зыы. в демках c AutoSort и RxDBGrid сам грид очень мерцает, причем проект второго из них компилится через раз.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

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

Сообщение alexs » 20.03.2014 14:41:20

насчет коментов - по русски не ставлю очевидно почему. а по англицки - боюсь опозориться :-).

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

Насчет твоей проблемы - сделай мелкий пример. Подумаем.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение zoltanleo » 20.03.2014 16:14:32

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


в аттаче. Базу (firebird) в архив пихать не стал ( больше 2 метров), вместо нее положил скрипт. Если нужны уточнения - спрашивай. Спасибо за внимание к моим нуждам :D
Вложения
test.rar
(126.03 КБ) Скачиваний: 968
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

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

Сообщение alexs » 28.03.2014 10:34:16

Если я правильно понял - посмотри мой пример.
Вложения
test1.rar
(124.67 КБ) Скачиваний: 973
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение zoltanleo » 04.04.2014 19:13:53

alexs писал(а):посмотри мой пример.

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

Изображение

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

Изображение

зы. ты не против, если я в твоих исходниках поковыряюсь?
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

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

Сообщение zoltanleo » 07.04.2014 17:57:29

Ура, получилось после небольшой правки исходников. Алексей, глянь личку, плз !

Изображение
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

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

Сообщение alexs » 09.04.2014 22:17:59

Изменения принял, с небольшими замечаниями. Отписал в личке.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение V@S » 31.10.2018 14:41:13

Побуду некромантом :)
А для чего после переоткрытия набора данных очищается список SortField?
Не логично как-то, если запрос в датасете изменится, так и колонки в гриде должны тогда измениться. Может стоит его очищать только в случае удаления или добавления колонок грида?
Аватара пользователя
V@S
новенький
 
Сообщения: 19
Зарегистрирован: 31.03.2008 10:23:20

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

Сообщение alexs » 01.11.2018 11:33:57

Проблема в том, что после переоткрытия датасета полей может и не быть.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение V@S » 01.11.2018 17:58:28

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

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

Компоненты классные, спасибо за труды!!!
Аватара пользователя
V@S
новенький
 
Сообщения: 19
Зарегистрирован: 31.03.2008 10:23:20

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

Сообщение alexs » 02.11.2018 11:52:31

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

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

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

Если есть желание что-то доработать - давай код. Включу в исходники.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru