Событие Report.CustomCalc - предварительная обработка входных данных

13.08.2017

Новое событие CustomCalc для объекта Report вызывается при вычислении выражения в объекте или при поступлении туда данных из источника данных. Таким образом мы можем использовать это событие для перехвата данных и их подмены. Когда это может быть полезно? Например, когда в поступаемых данных нужно отфильтровать значения или заменить какие-либо строки на другие.

Посмотрим на примере. Создаем простое приложение WindowsForms. Добавляем источник данных в проект. И компонент DataSet. Также, размещаем на форме компонент Report.

В выпадающем меню компонента Report выбираем Select Data Source:

 

И выбираем наш источник данных.

Теперь из этого же меню выбираем Design Report. Для демонстрации я добавил всего пару полей из таблицы Employee:

 

Для интереса посмотрим, как сейчас выглядит отчет:

 

Сохраняем отчет и закрываем дизайнер отчетов. Добавим на форму кнопку. И событие нажатия для нее:

1
2
3
4
5
6
7
8
9
10
11
private void Run_Click(object sender, EventArgs e)
 
 {
 
 report1.Load("D://Reports//Simple.frx");
 
 report1.Prepare();
 
 report1.ShowPrepared();
 
 }

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

А теперь для объекта report1 добавим событие CustomCalc:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
 private void report1_CustomCalc(object sender, FastReport.CustomCalcEventArgs e)
 
 {
 
 if (e.CalculatedObject.Equals("Roberto") )
 
 {
 
 e.CalculatedObject = "Test Name";
 
 }
 
 }

Здесь мы перехватываем нужные нам данные и замещаем их. Все данные при построении проходят через объект CalculatedObject. Мы отлавливаем нужные нам данные “Roberto”. И заменяем их.

Можно замещать целиком поле данных. При этом, условие будет выглядеть так:

1
if (e.Expression.IndexOf("employee.FirstName") != -1)

Мы написали код для замещения данных прямо в обработчике события CustomCalc. Также можно присвоить обработчик события непосредственно из кода, например, в MVC приложении. В удобном месте в коде приложения пишем:

1
report1.CustomCalc += FReport_CustomCalc;

 И сам обработчик:

1
2
3
4
5
6
7
8
9
10
11
12
13
private void FReport_CustomCalc(object sender, CustomCalcEventArgs e)
 
 {
 
 if (e.Expression.IndexOf("Employees.FirstName") != -1)
 
 { 
 
 e.CalculatedObject = "Test Name";
 
 }
 
 }

Запускаем приложение. Нажимаем кнопку и видим наш отчет:

 

Давайте сравним этот скриншот с тем, что был сделан ранее. Как видим, первая запись и имя сотрудника Roberto попали под условие и была заменена на Test Name.

Таким образом, у нас появился способ замещать некоторые данные в отчете, что наверняка найдет свое применение у искушенных пользователей FastReport.

2 сентября 2024

Обзор облачного решения для создания и управления отчетами

МоиОтчеты Облако — это мощное облачное решение для создания и управления отчетами, обеспечивающее широкий спектр возможностей, от создания документов в различных форматах до интеграции с корпоративными системами.
12 августа 2024

Как собрать и установить плагин Postgres в FastReport .NET

В этой статье описывается подключение к базе посредством плагина FastReport .NET для дизайнера отчетов из Visual Studio через NuGet-сервер.
8 августа 2024

Как установить FastReport .NET и его компоненты в Windows

Пошаговая инструкция по онлайн и ручной установке через регистрационный код FastReport .NET и его компонентов в Windows.