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 все реализовывать, что некомильфо).
зы. начал было править исходники стандартного грида, но там столько работы - времени жалко. Хотелось бы в сжатые сроки перевести проект с дельфей, а я все топчусь на месте
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 метров), вместо нее положил скрипт. Если нужны уточнения - спрашивай. Спасибо за внимание к моим нуждам
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)
Это естественно - сортируются только те данные, которые выбраны на клиенты. Компонента не знает - что на сервере ещё что-то осталось.
Если есть желание что-то доработать - давай код. Включу в исходники.