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

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.