16.11.2005, 11:22 | #1 |
Axapta Retail User
|
Сортировка в гриде с двумя DataSource
Есть грид, в котором отображаются данные из двух datasource - один подчинен другому по inner join.
Проблема в том, что не удается отсортировать данных в случае сортировки по полю подчиненной таблицы. После поиска по форуму было найдено следующее: "в 2.5 сортировка по дочерним DSам работала только после удаления сортировки в родительском DS. Т.е. если сначала отсортировали по родителю, то про дочерние сортировки можно забыть. Исправлялось с помощью clearSortIndex на QBDS родителя." У меня версия 3.0 но видимо ситуация не изменилась. Была добавлена сл. строка в execute query this.query().dataSourceName("Master").clearSortindex(); После этого если сортировать сразу по подчиненной - сортировка проходит. Если сначала по родителю, а потом нажать на сортировку подчиненной - уже нет. Подскажите как правильно снять родительскую сортировку? P.S. Кстати в стандартной форме InventTable такая же ситуация - сортировка по ценам после сортировки по номенклатуре уже не проходит. |
|
16.11.2005, 11:47 | #2 |
Member
|
Цитата:
Сообщение от ViV
...подчинен другому по inner join...
__________________
С уважением, glibs® |
|
16.11.2005, 12:50 | #3 |
Участник
|
2 glibs
View - это конечно хорошо. Но вот как быть с добавлением и изменением записей при использовании View. Если использовать для запросов и отчетов, то очень даже неплохой механизм. |
|
16.11.2005, 13:12 | #4 |
Member
|
Ну, извините... про обновление данных явно не написали, а я не подумал.
__________________
С уважением, glibs® |
|
16.11.2005, 13:23 | #5 |
Модератор
|
Цитата:
Сообщение от Zan
2 glibsНо вот как быть с добавлением и изменением записей при использовании View.
С Уважением, Георгий |
|
16.11.2005, 13:36 | #6 |
----------------
|
рекомендации все теже - чистить сортировки на мастере (clearSortindex + sortClear)
и еще не забыть, что работать надо с ds.queryRun().query() (когда он есть) |
|
16.11.2005, 14:46 | #7 |
Axapta Retail User
|
To Warm: Спасибо за подсказку с queryrun(). Подскажите еще пожалуйста, где лучше чистить сортировки (в каком методе или при каких условиях). Если я чищу в execute query то у меня прекрасно работает сортировка по подчиненной, но по мастеру не работает вообще
|
|
16.11.2005, 15:19 | #8 |
----------------
|
Цитата:
Сообщение от ViV
Если я чищу в execute query то у меня прекрасно работает сортировка по подчиненной, но по мастеру не работает вообще
(теоретический совет сам не пробовал) - Перед чисткой мастера сделайте проверку на наличие сортировок по дочерней таблице (sortFieldCount) и если их нет, то не делать чистку. Ну или делать зачистку только на методе sort нужного столбца grid-а |
|
16.11.2005, 15:47 | #9 |
Axapta Retail User
|
Проверка наличия сортировок не помогает - переход от дочерней к главной обрабатывает некорректно. (поскольку в подчинной стоит сортировка - 1 столбец и уже на мастере 1 столбец - то чистка происходит, хотя нам она уже не нужна, а видимо переход и количество столбцов с сортировкой обрабатывается где-то в недрах super)
А если в sort - то возникает следующий интересный эффект - по мастеру работает идеально. по дочерней при щелчке по столбцу сортировка всегда идет по возрастанию... (параметр в функцию sort всегда передается ascending) если выбирать сортировку по правой клавише - работает. Кто-нибудь может подсказать в какую еще сторону покапать? |
|
17.11.2005, 12:29 | #10 |
Участник
|
Могу предложить следующее
1. Перекрывать Sort 2. В Sort проверять предыдущую сортировку по нужному полю. Если сортировка установлена, то передавать в super() параметр с обратной сортировкой, если нет, то с сортировкой по умолчанию. Для корректной работы с сортировкой по правой кнопке пропускать этот шаг при выборе сортировки в контекстном меню. 3. Сбрасывать сортировки для всех датасорусов перед вызовом super. Во вложении приведен пример реализации
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (5), kashperuk (1), simply2double (1). |
17.11.2005, 15:26 | #11 |
Axapta Retail User
|
AndyD, большое спасибо!
Все заработало |
|
|
За это сообщение автора поблагодарили: kashperuk (1). |
29.06.2006, 13:39 | #12 |
Участник
|
Спасибо за проект.
Есть небольшое замечание - он не работает, если на форме больше датасорсов, чем участвуют в гриде, по котором нужна сортировку делать. В смысле, если есть не связанные с этим гридом датасорсы. (если быть совсем точным, то в случае, если "левый" датасорс стоит первым) Глюк в методе element.getSortOrder() - таблица передается одна, а датасорс берется первый, и он может быть не по этой таблице. Но если изменить код там под свои нужны,то все супер. Правда, еще есть один ньюанс. Когда в гриде отображаются строки, и значение во всех - пустое - то сортировка вроде как не должна меняться, но из-за очистки предыдущей сортировки такое иногда происходит. Ну, да это уже не так важно. Спасибо, еще раз |
|
11.09.2007, 17:57 | #13 |
Участник
|
К сожалению, если датасорс один, а пытаюсь сортировать edit-поле - не срастается
|
|
11.09.2007, 18:01 | #14 |
Участник
|
Цитата:
Сколько бы ни было источников, по display и edit методам нельзя сортировать |
|
05.06.2014, 15:22 | #15 |
Участник
|
В Ax2012 R2 сортировка по подчиненным датасоурсам в общем случае работает
Но .... не работает, если родительский датасоурс - временная таблица inMemory. При этом _sortDirection правильный и query тоже с правильной сортировкой С таблицей типа TempDB прекрасно работает Последний раз редактировалось IKA; 05.06.2014 в 15:56. |
|
05.06.2014, 15:55 | #16 |
Участник
|
PS: Проблема в том, что не всегда можно легко заменить InMemory на TempDB.
Например, TempDB не позволяет configurationKey на ней указывать ... |
|