Webreport. Показ готового отчета
Отчеты готовятся на сервере, потом через сервисы передаются на web-сервер. У web-сервера уже нет доступа к базе - надо передавать готовый отчет. Как это можно реализовать?
Когда присваиваю готовый отчет в WebReport1.Report - показывается пустая страница. Хотя если рядом же сохраняю его на диск - то winforms viewer показывает его нормально.
Вот пример кода:
Когда присваиваю готовый отчет в WebReport1.Report - показывается пустая страница. Хотя если рядом же сохраняю его на диск - то winforms viewer показывает его нормально.
Вот пример кода:
protected void WebReport1_StartReport(object sender, EventArgs e)
{
// Загрузили отчет, задали подключение к базе, сохранили в MemoryStream
FastReport.Report rpt = new FastReport.Report();
rpt.Load(@"D:\test.frx");
rpt.SetParameterValue("ConnectionString", "строка подключения");
rpt.Prepare();
MemoryStream ms = new MemoryStream();
rpt.SavePrepared(ms);
// Подгрузили отчет из MemoryStream, отдали его WebReport1
FastReport.Report rptCopy = new FastReport.Report();
MemoryStream ms2 = new MemoryStream(ms.ToArray());
rptCopy.LoadPrepared(ms2);
rptCopy.SavePrepared(@"D:/Newtest.fpx");
WebReport1.Report = rptCopy;
}
Комментарии
Нет никакой возможности заставить WebReport показать уже готовый отчет. После события StartReport происходит построение отчета, что затирает готовый отчет пустым.
И почему нормально работает такой код
FastReport.Report rpt = new FastReport.Report();
rpt.Load(@D:\test.frx);
rpt.Prepare();
WebReport1.Report = rpt;
Причем обращение к базе идет только на методе rpt.Prepare();
Если не передавать сам отчет - то можно было бы из отчета доставать данные и только их передавать. Но TableDataSource не сериализуемый.
Есть ли какие-то еще методы, чтобы получить TableDataSource из отчета помимо GetDataSource, так как этот метод требует знания alias источника данных?