Несколько Subreport'ов из файла

отредактировано 03:47 Раздел: FastReport .NET
Вначале создается несколько SubReport'ов.
Затем Run-Time из этих SubReport'ов собирается готовый отчет.
Примерно так:
                
                SubreportObject srPgHeader = new SubreportObject();
                srPgHeader.Name = "srHeader";
                srPgHeader.Bounds = new RectangleF(0, 0, Units.Millimeters * 25, Units.Millimeters * 5);
                page1.PageHeader.Objects.Add(srPgHeader);

                Report tmpRepHeader = new Report();
                tmpRepHeader.Load("..");
                ReportPage PageSubRepHeader = new ReportPage();
                PageSubRepHeader.Name = "srHeaderPage";
                PageSubRepHeader.AssignAll(tmpRepHeader.Pages[0] as ReportPage);
                aReport.Pages.Add(PageSubRepHeader);
                srPgHeader.ReportPage = PageSubRepHeader;
Однако если SubReport'ов несколько столкнулся с конфликтом имен у Бэндов у SubReport'ов.
т.е. у SubReport1 и SubReport2 одинаковое имя для бэнда PageData и других.

Как посоветуете этого избежать?
SubReport'ы формируются абсолютно независимо друг от друга.... И какие будут имена внутри каждого из них проследить нереально.

Может быть не делать "слепое" копирование страниц? А считывать контролы из SubReport'a и добавлять на "свои" Sub'страницы готового отчета?

Комментарии

  • отредактировано 03:47
    Можно перед копированием пробежаться по объектам страницы и поменять их имена:
    ...
    ReportPage srcPage = tmpRepHeader.Pages[0] as ReportPage;
    
    foreach (Base c in srcPage.AllObjects)
    {
      c.Name = "subreport1_" + c.Name;
    }
    
    PageSubRepHeader.AssignAll(srcPage);
    ...
    
  • отредактировано 03:47
    AlexTZ написал: »
    Можно перед копированием пробежаться по объектам страницы и поменять их имена:
    ...
    ReportPage srcPage = tmpRepHeader.Pages[0] as ReportPage;
    
    foreach (Base c in srcPage.AllObjects)
    {
      c.Name = "subreport1_" + c.Name;
    }
    
    PageSubRepHeader.AssignAll(srcPage);
    ...
    

    Делаю так.
    Но Имена компонентов почему-то не сохраняются. Т.е. в Report'e c.Name == "";
    Честно говоря это наблюдалось и раньше, но я списывал на конфликт имен.
    Однако это происходит постоянно.
    Например я добавляю один SubReport и в нем нет уже точно одинаковых имен.
    Слетают по-прежнему. Всё: и имена бэндов и компонентов - пустые
  • отредактировано 03:47
    Нда, ошибочка вышла... AssignAll имена не присваивает, новые объекты получаются с пустыми именами. Впрочем, это может быть и лучше:
    ...
    PageSubRepHeader.AssignAll(tmpRepHeader.Pages[0] as ReportPage);
    foreach (Base c in PageSubRepHeader.AllObjects)
    {
      c.CreateUniqueName();
    }
    
  • отредактировано 03:47
    PS: Вы таким образом пытаетесь сделать одинаковый заголовок для всех отчетов? Не проще ли использовать наследование отчетов - оно было создано именно для таких целей.
  • отредактировано 03:47
    AlexTZ написал: »
    PS: Вы таким образом пытаетесь сделать одинаковый заголовок для всех отчетов? Не проще ли использовать наследование отчетов - оно было создано именно для таких целей.
    Нет. Задача собрать отчет из произвольного количества саботчетов ран-тайм.
    Пока вопросов больше нет
    Спасибо.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.