Несколько отчетов в одном объекте WebReport - работа с закладками

12.08.2017

Популярное, сейчас, направление веб отчетов активно развивается в FastReport.Net. Новая функция – закладки, позволяет создавать на панели инструментов веб отчета закладки. Эти закладки позволяют открывать другие отчеты в том же окне. Такое решение может быть удобно для вывода серии отчетов схожей тематики или связанных по контексту. Выглядит это примерно так:

Закладки представлены в виде кнопок. Выбирая закладку, мы запускаем отчет в том же самом окне. Теперь нет необходимости выводить каждый отчет в индивидуальном объекте WebReport. Это поможет сэкономить пространство на странице и позволит избежать перегруженности сайта.

Давайте рассмотрим реализацию данной функции на примере. Я использовал MVC веб проект.

Подключаем библиотеки FastReport к проекту:

  • FastReport.dll;
  • FastReport.Web.dll.

Их можно найти в папке с приложением FastReport.Net.

В контроллере Home создаем экземпляры объектов отчета, источник данных, добавляем закладки. В общем вся логика здесь.

Объявляем библиотеки:

1
2
3
4
5
6
7
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FastReport.Web;
using System.Web.UI.WebControls;

Для метода Index пишем следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 public ActionResult Index()
 {
 string report_path = "C:\\Program Files (x86)\\FastReports\\FastReport.Net\\Demos\\Reports\\"; //Задаем путь к папке с отчетами
 System.Data.DataSet dataSet = new System.Data.DataSet(); //Создаем экземпляр объекта DataSet
 dataSet.ReadXml(report_path + "nwind.xml"); //Загружаем базу данных XML 
 WebReport webReport = new WebReport(); //Создаем экземпляр объекта webReport
 webReport.Width = Unit.Percentage(100); //Устанавливаем ширину для webReport в 100%
 webReport.Height = Unit.Percentage(100); //Устанавливаем высоту для webReport в 100%
 webReport.SinglePage = true; //Включаем режим «Весь отчет на одной странице»
 webReport.Report.RegisterData(dataSet, "NorthWind"); //Регистрируем источник данных в объекте WebReport
 webReport.Report.Load(report_path + "Simple List.frx"); //Загружаем отчет в объект WebReport
 webReport.CurrentTab.Name = "Simple List"; //Задаем имя первой закладки
 
 Report report2 = new Report();//Создаем обычный отчет для второй закладки
 report2.RegisterData(dataSet, "NorthWind"); //Регистрируем данные в этом отчете
 report2.Load(report_path + "Labels.frx"); //Загружаем отчет в объект Report
 webReport.AddTab(report2, "Labels").Properties.SinglePage=true; //Добавляем закладку на панель инструментов веб отчета. В качестве параметров передаем объект отчета и имя закладки. Для данной закладки включаем свойство «Весь отчет на одной странице».
 Report report3 = new Report(); //Создаем обычный отчет для третей закладки
 report3.RegisterData(dataSet, "NorthWind");//Регистрируем данные в этом отчете
 report3.Load(report_path + "Master-Detail.frx");//Загружаем отчет в объект Report
 webReport.AddTab(report3, "Master-Detail");//Добавляем закладку на панель инструментов веб отчета. В качестве параметров передаем объект отчета и имя закладки.
 
 // webReport.Tabs.Clear();
 webReport.TabPosition = TabPosition.InsideToolbar;//Задаем позицию расположения закладок
ViewBag.WebReport = webReport; //Передаем в ViewBag наш веб отчет return View();
 }
 

Есть еще одно интересное свойство:

webReport.ShowTabCloseButton

Если его установить в true, то закладки будут иметь «крестик» для удаления закладки.

Такая опция может быть полезна в интерактивных отчетах, где закладки будут создаваться динамически и содержать детальные отчеты. Если отчет не нужен, можно закрыть его закладку. Потом, при необходимости, можно будет снова сгенерировать его закладку.

Выше мы рассмотрели, как создавать закладки, передавать в них отчеты. Мы использовали метод:

1
public ReportTab AddTab(Report report, string name);

В качестве параметров передаем объект отчета и название закладки. Однако, можно обойтись и одним параметром:

1
public ReportTab AddTab(Report report);

Передаем лишь объект отчета. При этом имя закладки будет сгенерировано автоматически. Это будет порядковый номер закладки.

Есть возможность передать в закладку веб отчета уже построенный отчет:

1
public ReportTab AddTab(Report report, string name, bool reportDone);

Здесь, мы передаем отчет, имя закладки и свойство, указывающее должен ли быть отчет предварительно построен. Можно в объект отчет загрузить файл уже построенного отчета, а последний параметр задать как true. Тогда отчет будет загружен из указанного файла fpx.

Это может выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
 Report report2 = new Report(); //Создаем объект отчета
 report2.RegisterData(dataSet, "NorthWind"); //Регистрируем данные в отчете
 report2.Load(report_path + "Labels.frx"); //Загружаем файл отчета
 report2.Prepare();//Выполняем построение отчета
 string s = this.Server.MapPath("~/App_Data/Prepared.fpx");//Задаем директорию для сохранения построенного отчета
 report2.SavePrepared(s);//Сохраняем построенный отчет в формате fpx
 
 
Report firstReport = new Report();//Создаем объект отчета
 firstReport.LoadPrepared(s);//Загружаем в него построенный отчет из файла
 webReport.AddTab(firstReport, "First tab", true);//Добавляем закладку на панель инструментов веб отчета

Я показал, как сохранить подготовленный отчет в файл, а затем загрузить его и использовать в закладке веб отчета.

Переходим к представлению. В папке Views->Home открываем файл Index.cshtml.

Весь код страницы состоит из четырех строк:

1
2
3
4
@{
 ViewBag.Title = "Home Page";
}
@ViewBag.WebReport.GetHtml()

В последней строке и происходит вывод отчета. Соответствующий этой странице контроллер передает в нее отчет.

Подключаем скрипты для веб отчета в инициализации представления _Layout.cshtml (в папке Views->Shared):    

1
2
3
4
5
6
<head>

@WebReportGlobals.Scripts()
@WebReportGlobals.Styles() 

</head>

В папке Views редактируем Web.config.

Добавляем пространства имен:

1
2
3
4
5
 <namespaces>

 <add namespace="FastReport" />
 <add namespace="FastReport.Web" />
 </namespaces>

Редактируем Web.config, который лежит в корне проекта. Добавляем обработчик:

1
2
3
4
 <handlers>

 <add name="FastReportHandler" path="FastReport.Export.axd" verb="*" type="FastReport.Web.Handlers.WebExport"/>
 </handlers>

 

Несомненно, новая функция добавления закладок в веб отчет будет полезна и востребована. Возможности веб отчетов постепенно расширяются. Похоже, в скором будущем, веб отчеты ничем не будут уступать десктопным.

.NET FastReport ASP.NET WebReport .NET FastReport ASP.NET WebReport
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»