|
05.03.2008, 21:28 | #1 |
Участник
|
Узнать sortfield из QueryBuildDataSource
Фактически изначально задача может быть сформулированна так: как узнать айди поля по которому ведётся сортировка. Нашел метод sortfield, но то, как он работает - для меня загадка, метод этот не парм и мало-того принимает в себя параметр искомого типа. Что делает этот метод и если он не возвращает поле\список полей по которым ведётся сортировка без каких-либо входящих данных - для меня загадка.
З.Ы Помогите, люди добрые)
__________________
Axapta has seduced me deadly! |
|
05.03.2008, 23:07 | #2 |
Участник
|
В подсказке ошибка. В качестве параметра принимается порядковый номер поля в предложении ORDER BY
X++: Counter c;
;
for (c=1;c<=QueryBuildDataSource.SortFieldCount();c++)
fieldId = QueryBuildDataSource.SortField(c);
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
05.03.2008, 23:53 | #3 |
Участник
|
Думаю уместным здесь будет дать ссылочку на проект того же AndyD, связанный с сортировкой, и демонстрирующий различные способы манипуляций с оной:
Сортировка в гриде с двумя DataSource |
|
06.03.2008, 12:08 | #4 |
Участник
|
О, это уже неплохо, спасибо большое. Но вот такая ерунда. Изначальный таск - снять по какому полю включена сортировка в Гриде, именно в гриде, а не квери. Логично было бы предположить, что грид сам не содержит кверю сортировки, а уполномачивает 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 |
Мрачный тип
|
Вместо query() попробуйте queryRun().query() - и будет вам счастие в ExecuteQuery()
Просто query() вернет Вам default'овый запрос, текущее состояние запроса - лучше через queryRun()
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 06.03.2008 в 12:37. |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
06.03.2008, 13:11 | #6 |
Участник
|
Блин, точно, туплю однако! Большое спасибо.
З.Ы Ещё один ламерский вопрос, как снять дата-филд с какого-то контрола грида, по его номеру в гриде. То есть, если обращатся к такому контролу напрямую - свойство есть, а если вот таким вот макаром My_Grid.controlNum(Ind), то нет. Я так понимаю, его надо приводить к какому-то типу, что бы тот делегировал ему свои свойста или создать обьек данного типа на основе My_Grid.controlNum(Ind). Как это сделать?
__________________
Axapta has seduced me deadly! |
|
06.03.2008, 13:16 | #7 |
Участник
|
X++: Object ctrl; ; ctrl = My_Grid.controlNum(ind); ctrl.datafield(); |
|
06.03.2008, 13:26 | #8 |
Участник
|
Мм, меня сразу удивило, что у типа Object может быть datafield() пропертя. Но решил проверить, не удивительно, что её у этого типа нет.
Если это был просто пример позднего связывания, то такую штуку я знаю, спасибо) Фактически, вопрос состоял в том, какой именно тип имеет свойство datafield.
__________________
Axapta has seduced me deadly! |
|
06.03.2008, 13:18 | #9 |
Участник
|
можно еще вот так:
X++: FormStringControl ctrlStr; switch (classIdGet(My_Grid.controlNum(ind))) { case classNum(FormStringControl): ctrlStr = My_Grid.controlNum(ind); //ctrlStr.dataField() break; //...другие типы } |
|
06.03.2008, 13:28 | #10 |
Участник
|
Ага, значит предидущий пример был просто шаблоном)) Тогда всё ясно, благодарю.
__________________
Axapta has seduced me deadly! |
|
06.03.2008, 13:34 | #11 |
Участник
|
легко увидеть, что FormStringControl extends FormControl, а у того нет энтого поля. Таким образом, нет никакого одного предка с жтим полем => надо перечислить сдатабайнденные контролы руками
|
|
06.03.2008, 13:58 | #12 |
Участник
|
Цитата:
Update. Хотя нет, если добавить на грид груп или виндов, будет ошибка. Так что таки-да, надо проверять!
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 06.03.2008 в 14:01. |
|
06.03.2008, 13:36 | #13 |
Участник
|
Если Вы напишете именно так, как указано в первом примере, ошибки компиляции не будет.
На объектах типа Object это не проверяется. IntelliScense вам, конечно-же, ничего не покажет в выпадающем списке методов, потому как еще не известно, какого типа будет этот объект. (это самое позднее связывание) |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
06.03.2008, 13:46 | #14 |
Участник
|
Цитата:
Сообщение от kashperuk
Если Вы напишете именно так, как указано в первом примере, ошибки компиляции не будет.
На объектах типа Object это не проверяется. IntelliScense вам, конечно-же, ничего не покажет в выпадающем списке методов, потому как еще не известно, какого типа будет этот объект. (это самое позднее связывание)
__________________
Axapta has seduced me deadly! |
|