Событие 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.

.NET .NET FastReport FastReport
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 ООО «Быстрые отчеты»