![]() |
#11 |
NavAx
|
Да, я некорректно ответил. Нельзя после init-а изменять датасорсы на форме. Т.е. даже если что-то и заджойнить, то отобразить эти данные нельзя.
Это можно в принципе обойти - если открыть\закрыть форму. Вот пример - код из класса, который вызван из init формы, но до вызова super(). Проверяется - есть ли в форме нужный датасорс - если нету - добавляется и форма переоткрывается. Код: // Метод вызывается из init формы до вызова super() protected void addDataSources() { Args args; Form formNew; FormRun formRunNew; FormBuildDataSource formBuildDataSource; int i; ; for (i = 1; i <= formRun.form().dataSourceCount(); i++) { formBuildDataSource = formRun.form().dataSource(i); // Ищем датасорсы - добавлены ли они уже в форму (добавляются динамически) if (formBuildDataSource.name() == #SetupGroupingDS) buildSetupGroupingDS = formBuildDataSource; } if (useGrouping && !buildSetupGroupingDS) restartForm = true; if (restartForm) // Не добавлены - придётся перезагружать форму { formNew = new Form(formRun.name()); // Добавляем датасорсы if (useGrouping) { formBuildDataSource = formNew.addDataSource(#SetupGroupingDS); formBuildDataSource.table(tablenum(TmpSysQuery)); formBuildDataSource.index(indexnum(TmpSysQuery, SortOrderIdx)); formBuildDataSource.allowCreate(false); formBuildDataSource.allowDelete(false); } // Теперь можно запустить новую форму - датасорсы добавлены args = formRun.args(); args.object(formNew); formRunNew = classFactory.formRunClass(args); formRunNew.init(); formRunNew.run(); formRunNew.wait(); // Не забыть закрыть старую форму если параметр restartForm = true // (это надо сделать после super() в init формы) } }
__________________
С уважением, Игорь Ласийчук. |
|
Теги |
lookup, query, программно |
|
|