[ELMA3] Нумерация строк и колонок в матричном отчёте
Как создавать матричные отчёты описано здесь: https://www.elma-bpm.ru/kb/article-505.html
Часто возникает ситуация, когда строки и/или колонки в таком отчёте требуется пронумеровать. Сделать это можно, используя программный код на странице Code (слева внизу на Рисунке 1).
В качестве примера создадим простой запрос в источнике данных отчёта:
select FULLNAME ФИО, month(EmployDate) Месяц, count(*) Количество from "User" group by fullname, month(EmployDate)
Затем перейдём на вкладку Макет отчёта и создадим Matrix-компонент в полоске Page Header. Для этого обратите внимание на вертикальную панель объектов отчёта слева. В ней нужно выбрать объект Matrix, нажать левой кнопкой мыши, переместить курсор мыши на полоску Page Header и нажать ещё раз левой кнопкой мыши. Таким образом, объект Matrix (сводная таблица) будет добавлена в отчёт. Подробнее о составе вкладки Макет отчёта можно узнать из справки.
![]() |
|
Перенесём поля ФИО, Месяц и Количество на матрицу из панели Data.

Рисунок 1
Подготовим код для нашего отчёта в закладке Code (слева внизу на Картинке 1):
using System; using System.Collections; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; using System.Data; using FastReport; using FastReport.Data; using FastReport.Dialog; using FastReport.Barcode; using FastReport.Table; using FastReport.Utils;
namespace FastReport
{
public class ReportScript
{
// метод, вызываемый в объекте Matrix в событии AfterData
private void Matrix1_AfterData(object sender, EventArgs e)
{
// снятие метода AfterData для объекта ResultTable, если он был назначен ранее
Matrix1.ResultTable.AfterData -= Matrix1ResultTable_AfterData;
// назначение метода AfterData для объекта ResultTable
Matrix1.ResultTable.AfterData += Matrix1ResultTable_AfterData;
}
private void Matrix1ResultTable_AfterData(object sender, EventArgs e)
{
// получаем таблицу результатов из sender
TableResult table = sender as TableResult;
// ------------------- новая строка с нумерацией колонок ---------
TableRow newRow = new TableRow();
// добавляем строку в таблицу результатов
table.Rows.Insert(1, newRow);
// пробегаемся по всем ячейкам новой строки
for (int i = 0; i < table.ColumnCount; i++)
{
// установить стиль для новых ячеек, используя стиль верхней левой ячейки
table[i, 1].SetStyle(table[0,0]);
// установить текст (# - для первого столбца и номер для остальных)
table[i, 1].Text = i == 0 ? "#" : i.ToString();
}
// ------------------- новая колонка с нумерацией -------------------
TableColumn newColumn = new TableColumn();
// добавить новую колонку в таблицу результатов
table.Columns.Insert(1, newColumn);
// пробегаемся по всем ячейкам нового столбца
for (int i = 0; i < table.RowCount; i++)
{
// установить стиль для новых ячеек, используя стиль верхней левой ячейки
table[1, i].SetStyle(table[0,0]);
// проставим текст для каждой ячейки, кроме первой (это заголовок, оставим его пустым)
if (i > 1)
table[1, i].Text = (i - 1).ToString();
}
// количество фиксированных колонок увеличить на 1
table.FixedColumns = 2;
table.FixedRows = 2;
}
}
}
После того, как добавим этот код, пройдём в объект Matrix в отчёте.

Для этого надо нажать на значок в верхнем левом углу объекта Matrix. Справа внизу появятся свойства объекта:

В свойствах надо нажать на значок
и откроются события этого объекта:

Здесь необходимо выбрать событие AfterData и выбрать из выпадающего меню метод Matrix_AfterData. Таким образом мы зададим обработчик события после получения данных в объекте Matrix.
Для проверки результата можете нажать вверху кнопку отладка:

В результате мы получим дополнительную строку с нумерацией колонок и колонку с нумерацией строк.


– добавление сводной таблицы в отчет.