Показать сообщение отдельно
Старый 05.06.2006, 19:20   #11  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Да, я некорректно ответил. Нельзя после 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 формы)
    }
}
__________________
С уважением, Игорь Ласийчук.