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