[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.
Для проверки результата можете нажать вверху кнопку отладка:
В результате мы получим дополнительную строку с нумерацией колонок и колонку с нумерацией строк.