AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.03.2008, 21:28   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Узнать sortfield из QueryBuildDataSource
Фактически изначально задача может быть сформулированна так: как узнать айди поля по которому ведётся сортировка. Нашел метод sortfield, но то, как он работает - для меня загадка, метод этот не парм и мало-того принимает в себя параметр искомого типа. Что делает этот метод и если он не возвращает поле\список полей по которым ведётся сортировка без каких-либо входящих данных - для меня загадка.
З.Ы Помогите, люди добрые)
__________________
Axapta has seduced me deadly!
Старый 05.03.2008, 23:07   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В подсказке ошибка. В качестве параметра принимается порядковый номер поля в предложении ORDER BY
X++:
Counter c;
;
for (c=1;c<=QueryBuildDataSource.SortFieldCount();c++)
    fieldId = QueryBuildDataSource.SortField(c);
Кроме того, сортировка может идти по полям, входящим в индексы. Их можно получить с помощью метода sortIndex()
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: HorrR (1).
Старый 05.03.2008, 23:53   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Думаю уместным здесь будет дать ссылочку на проект того же AndyD, связанный с сортировкой, и демонстрирующий различные способы манипуляций с оной:

Сортировка в гриде с двумя DataSource
Старый 06.03.2008, 12:08   #4  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
О, это уже неплохо, спасибо большое. Но вот такая ерунда. Изначальный таск - снять по какому полю включена сортировка в Гриде, именно в гриде, а не квери. Логично было бы предположить, что грид сам не содержит кверю сортировки, а уполномачивает DS. Поэтому проверил ExecuteQuery у DS, действительно, выполнение метода инициируется каждый раз, когда кликаешь на хедере какого-нить поля грида, то есть действительно сортировка так или иначе происходит через DS. Но вот, что интересно, поставил я инфолог в ExecuteQuery, что б выводил количество полей, по которым идёт сортировка(логично, что как минимум одно, то, по которому включена сортировка в гриде)
X++:
qbds= this.query().dataSourceNo(1);
    info(int2str(qbds.sortFieldCount()));
А ифолог выдаёт красивый круглый нолик.
__________________
Axapta has seduced me deadly!
Старый 06.03.2008, 12:33   #5  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Вместо query() попробуйте queryRun().query() - и будет вам счастие в ExecuteQuery()
Просто query() вернет Вам default'овый запрос, текущее состояние запроса - лучше через queryRun()
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 06.03.2008 в 12:37.
За это сообщение автора поблагодарили: HorrR (1).
Старый 06.03.2008, 13:11   #6  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Блин, точно, туплю однако! Большое спасибо.

З.Ы Ещё один ламерский вопрос, как снять дата-филд с какого-то контрола грида, по его номеру в гриде. То есть, если обращатся к такому контролу напрямую - свойство есть, а если вот таким вот макаром My_Grid.controlNum(Ind), то нет. Я так понимаю, его надо приводить к какому-то типу, что бы тот делегировал ему свои свойста или создать обьек данного типа на основе My_Grid.controlNum(Ind). Как это сделать?
__________________
Axapta has seduced me deadly!
Старый 06.03.2008, 13:16   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
X++:
Object ctrl;

;

ctrl = My_Grid.controlNum(ind);
ctrl.datafield();
но учтите, что этим вы отказываетесь от проверки компилятором логики написанного вами кода. (late binding, так сказать)
Старый 06.03.2008, 13:18   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
можно еще вот так:
X++:
FormStringControl ctrlStr;

switch (classIdGet(My_Grid.controlNum(ind)))
{
   case classNum(FormStringControl):
    ctrlStr =     My_Grid.controlNum(ind);
    //ctrlStr.dataField()
    break;
//...другие типы
}
Старый 06.03.2008, 13:26   #9  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Мм, меня сразу удивило, что у типа Object может быть datafield() пропертя. Но решил проверить, не удивительно, что её у этого типа нет.

Если это был просто пример позднего связывания, то такую штуку я знаю, спасибо) Фактически, вопрос состоял в том, какой именно тип имеет свойство datafield.
__________________
Axapta has seduced me deadly!
Старый 06.03.2008, 13:28   #10  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от kashperuk Посмотреть сообщение
можно еще вот так:
X++:
FormStringControl ctrlStr;
 
switch (classIdGet(My_Grid.controlNum(ind)))
{
   case classNum(FormStringControl):
    ctrlStr =     My_Grid.controlNum(ind);
    //ctrlStr.dataField()
    break;
//...другие типы
}
Ага, значит предидущий пример был просто шаблоном)) Тогда всё ясно, благодарю.
__________________
Axapta has seduced me deadly!
Старый 06.03.2008, 13:34   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
легко увидеть, что FormStringControl extends FormControl, а у того нет энтого поля. Таким образом, нет никакого одного предка с жтим полем => надо перечислить сдатабайнденные контролы руками
Старый 06.03.2008, 13:36   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Если Вы напишете именно так, как указано в первом примере, ошибки компиляции не будет.
На объектах типа Object это не проверяется.

IntelliScense вам, конечно-же, ничего не покажет в выпадающем списке методов, потому как еще не известно, какого типа будет этот объект. (это самое позднее связывание)
За это сообщение автора поблагодарили: HorrR (1).
Старый 06.03.2008, 13:46   #13  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Если Вы напишете именно так, как указано в первом примере, ошибки компиляции не будет.
На объектах типа Object это не проверяется.

IntelliScense вам, конечно-же, ничего не покажет в выпадающем списке методов, потому как еще не известно, какого типа будет этот объект. (это самое позднее связывание)
Оу, вот в чём дело-то) Спасибо большое!
__________________
Axapta has seduced me deadly!
Старый 06.03.2008, 13:58   #14  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от belugin Посмотреть сообщение
легко увидеть, что FormStringControl extends FormControl, а у того нет энтого поля. Таким образом, нет никакого одного предка с жтим полем => надо перечислить сдатабайнденные контролы руками
В моём отдельном случае, когда я прохожусь по контролам грида проверка не нужна, так как все из контролов на гриде обладают datafield свойством, так что используй хоть FormStringControl, хоть FormIntControl, когда нужна только эта пропертя - разницы никакой.


Update. Хотя нет, если добавить на грид груп или виндов, будет ошибка. Так что таки-да, надо проверять!
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 06.03.2008 в 14:01.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
QueryBuildDataSource - динамически if_maks DAX: Программирование 6 07.04.2006 13:39
Через map узнать fieldId Dron AKA andy DAX: Программирование 6 20.02.2004 18:18
Вопрос по QueryBuildDataSource, QueryBuildRange и QueryRun Paul_ST DAX: Программирование 9 11.02.2004 17:13
Помогите разобраться с QueryBuildDataSource raz DAX: Программирование 10 04.09.2003 12:03
Можно ли узнать ширину колонки в Grid? Maxim Gorbunov DAX: Программирование 1 05.07.2002 18:52
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:14.