16.08.2011, 13:50 | #1 |
Участник
|
Цикл по строчкам Grid'а
Приветствую вас! Есть класс. Класс запускает форму с гридом для сбора данных отчета. В гриде создаем строчки. Подскажите как и как правильно пустить цикл по гриду (дата сорсу) для считывания полей?
X++: anyType initDialog() { Args args = new Args(); FormRun formRun; Object formRunObj; ; args.name(formstr("имя некой формы")); formRun = ClassFactory.formRunClass(args); formRun.init(); formRunObj = formRun; formRun.run(); formRun.wait(); if(formRun.closedOk()) { formRunObj = formRun; _beginDate = formRunObj.getBeginDate(); //получаем с формы _endDate = formRunObj.getEndDate(); //получаем с формы formRun.dataSource().cursor(); ..........?..........
__________________
С уважением, Алексей. |
|
16.08.2011, 13:56 | #2 |
Участник
|
на датасорсе getFirst() и getNext()
|
|
|
За это сообщение автора поблагодарили: axalex (1). |
16.08.2011, 13:58 | #3 |
Участник
|
getFirst() и getNext() - курсоры строк возвращать будет?
__________________
С уважением, Алексей. |
|
16.08.2011, 14:03 | #4 |
Участник
|
Я бы передал в форму ссылку на вызывающий класс через element.Args().caller(), а дальше использовал бы методы класса при закрытии формы(методы canClose(), close()). Если таблица в которой создаются данные временная, то в init датасорса c именем MyTmpTable нужно вписать: MyTmpTable.setTmpData(myCallerClass.getTmpData()). Здесь метод getTmpData возращает ссылку на временную таблицу.
|
|
|
За это сообщение автора поблагодарили: axalex (1). |
16.08.2011, 14:10 | #5 |
Участник
|
Да-Временная.
__________________
С уважением, Алексей. |
|
16.08.2011, 14:17 | #6 |
Участник
|
Цитата:
Для доступа к строкам, хранящимся в таблице можно использовать конструкции select, while select или объект QueryRun. Получение строк через DataSource обычно используют, когда есть необходимость при обходе строк таблицы учесть фильтр, который пользователь мог наложить на форме через пользовательский интерфейс. Если в вашем случе это не нужно, то обращайтесь непосредственно к таблице. |
|
|
За это сообщение автора поблагодарили: axalex (1). |
16.08.2011, 14:29 | #7 |
Участник
|
Ну значит надо делать приблизительно как я написал, поскольку Вам нужно сказать какой именно ЭКЗЕМПЛЯР таблицы должна использовать форма. То есть в classDeclaration должна быть объявлена ваша таблица: MyTmpTable myTmpTable и сделан метод для передачи ссылки на таблицу:
public MyTmpTable parmTmpTable() { return myTmpTable; } в инициализацию args добавить: args.caller(this). в ClassDeclaration у формы добавить класс myCallerClass(который вызывает форму). Его инициализировать в init у формы myCallerClass = element.args().caller(). и добавить в Init datasource MyTmpTable.setTmpData(myCallerClass.getTmpData()). После этого можно просто обращаться к данным таблицы через select. |
|
16.08.2011, 14:51 | #8 |
Участник
|
Раз уж последовательность вызовов в примере такова, что форму запускает класс, из которого в дальнейшем и нужно обрабатывать введённые значения, то тогда я бы ещё на этапе подготовки формы связал бы какой-нибудь локальный экземпляр временной таблицы с источником данных создаваемой формы
X++: formRun.dataSource().cursor().setTmpData(MyTmpTable); P.S. Только нужно помнить что работа с источниками данных формы возможна только после их инициальзации, те после строки formRun.init(); Последний раз редактировалось S.Kuskov; 16.08.2011 в 14:57. |
|
16.08.2011, 15:02 | #9 |
Участник
|
На датасорсе формы, содержащей временную таблицу с данными создал метод, который возвращает временную таблицу.
X++: TmpAdditionalAgreementRailTable getTmpData()
{
return TmpAdditionalAgreementRailTable;
} X++: ... formRun.run(); formRun.wait(); if(formRun.closedOk()) { formRunObj = formRun; common.setTmpData(formRunObj.getTmpData()); while select common { ... } ...
__________________
С уважением, Алексей. Последний раз редактировалось axalex; 16.08.2011 в 16:56. |
|