Программно объединить отчеты

отредактировано 01:34 Раздел: FastReport .NET
Есть отчет, в нем “шапка” для второго отчета. Есть ли возможность программно вставить “шапку” в основной отчет?

Комментарии

  • отредактировано 01:34
    Работники Fast Reports, похоже, покинули русскоязычный форум... Иначе как объяснить, что никаких ответов здесь нет от них...
    Сам себе отвечу на вопрос.
    GAAlex:
    А никак! Ибо Subreport не имеет никакого отношения к Report. Subreport придуман только для того чтобы иметь свои данные и все. А можно было бы сделать наследование и, допустим, хранить тело Subreport в Report - ибо один XML внутри другого не представляет трудности. Или я не прав?
  • отредактировано 01:34
    Да, похоже форум забросили...

    А по сути вопроса существует несколько вариантов решения.
    1. Наследование.
    Шапку в базовый отчет, основной наследуем от базового.
    2. Добавление одного отчета к другому при генерации.
    Смотреть
    Report.Prepare(bool append);
  • отредактировано 01:34
    fantomus
    Спасибо. Попробую. второй вариант.
    По первому: Report и Subreport вообще разные классы - там нет наследования... :-( Это и было для меня открытием, в плохом смысле этого слова.
  • отредактировано 01:34
    А не надо Report от Subreport наследовать (и наоборот).
    Обычно создается набор базовых отчетов (с корпоративным стилем, например).
    Они используются только для наследования.
    От них наследуются все рабочие отчеты.
    В случае изменения в базовых (текст поменялся, цвет и пр.), все изменения отображаются в рабочих.
    Только надо учитывать, что нельзя наследовать существующий отчет, только новый.
  • отредактировано 01:34
    fantomus
    Я правильно понял, что о наследовании речь идет только при хранении отчетов в виде класса C#? Если так, то мы теряем гибкость при изменении базовых отчетов (код непроходимо будет пересобирать)
  • отредактировано 01:34
    Конечно же нет.
    Базовый отчет можно загружать из файла или потока.
    public void LoadBaseTemplateFromStream(Stream templateStream)
            {
                if (templateStream == null || templateStream.Length == 0)
                    return;
    
                templateStream.Position = 0;
                baseTemplateBody = templateStream;
    
                report.LoadBaseReport += (sender, e) =>
                        {
                            e.Report.Load(baseTemplateBody);
                            baseTemplateBody.Close();                        
                        };
            }
    
    ...
    
                    // Здесь создаем объект Report
                    CreateReportObject();
    
                    // Загрузка базового шаблона
                    LoadBaseTemplateFromStream(baseReportBody);
    
                    // Загрузка рабочего шаблона
                    LoadTemplateFromStream(reportBody); // report.Load(reportBody);
    ...
    
  • отредактировано 01:34
    fantomus
    Спасибо, понял. Хотя бы новые отчеты будут изменены "автоматом"/

    Но пожелание к разработчикам чтобы они сделали у Subreport методы Load и Save остается... или у бэндов :-)

    C праздником всех. С Днем программиста

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

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