Как добавить поле с данными в строку матрицы

08.10.2018

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

Предположим, вы создаете матрицу с переменным количеством столбцов, которые будут добавляться в зависимости от каких-либо условий, но часть данных у вас статична. Они всегда заполняются. Было бы неплохо просто поместить эти поля данных просто в матрицу, а остальные ячейки пусть заполняются из кода. Несмотря на то, что заполнение матрицы данными предусматривается только двумя способами (из кода или автоматически, полями данных) мы совместим их.

На самом деле, технология очень проста. Поле данных просто вставляется внутрь ячейки в виде отдельного текстового объекта. Однако, это не все. При добавлении данных в матрицу в скрипте отчета, необходимо добавлять и номер строки из набора даных.

Давайте рассмотрим на примере.

Создадим отчет и добавим матрицу на бэнд «Данные». Подключим источник данных – демонстрационная база данных из поставки, таблица Employees.

Шаблон матрицы выглядит так:

В ячейку со значением 2, мы добавили текстовый объект. В нем выбираем поле Employees.LastName. Это именно то «статическое» поле о котором мы говорили выше.

Создаем обработчик события AfterData для матрицы.

1
2
3
4
5
6
7
8
9
10
11
12
13
private void Matrix1_AfterData(object sender, EventArgs e)
 {
 DataSourceBase rowData = Report.GetDataSource("Employees"); // получаем источник данных Employees.
 Matrix1.DataSource = rowData; // присваиваем его свойству DataSource матрицы
 
 rowData.Init(); //инициализируем источник данных
 // перебираем все записи источника данных
 while (rowData.HasMoreRows)
 { 
 Matrix1.Data.AddValue(new Object[] {"Phone" }, new Object[] { (string)Report.GetColumnValue("Employees.City"), (string)Report.GetColumnValue("Employees.FirstName")}, new Object[] {(string)Report.GetColumnValue("Employees.HomePhone") }, Report.GetDataSource("Employees").CurrentRowNo); //добавляем очередную запись
 rowData.Next(); //получить следующую запись
 }
 }

Из комментариев понятно, что при добавлении строки данных, мы определяем заголовок Phone. Затем вставляем данные по порядку: город, имя и телефон. А также, мы должны передать номер строки данных, чтобы вставить фамилию из текущей записи данных.

Теперь запустим отчет:

 

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

.NET FastReport .NET FastReport
8 апреля 2025

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx)

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx): описание и инструкция по использованию инструмента.
8 апреля 2025

Как настроить подключение к Apache Ignite в FastReport .NET

В этой статье мы рассмотрим, как настроить подключение к Apache Ignite в FastReport .NET. Вы узнаете, какие шаги необходимо выполнить для подключения плагина через код и дизайнер отчетов.
25 марта 2025

Как объединить несколько отчетов в один из FastReport .NET

FastReport .NET — это мощный инструмент для создания и управления отчётами. В данной статье мы рассмотрим, как объединить несколько отчётов в один в FastReport .NET.