Как фильтровать построенную матрицу

23.06.2021

В FastReport объект Матрица позволяет нам отфильтровать данные. Это одна из самых востребованных функциональных возможностей и многих пользователей она вполне устраивает. Однако есть случаи, когда фильтрация исходных данных не подходит.

Давайте рассмотрим матрицу ниже.

Исходная матрица

Как вы видите - это статистика продаж по сотрудникам за 5 лет. Для сотрудника Steven Buchanan нет статистики за 2011, 2012 и 2015 годы. Это означает, что если мы отфильтруем матрицу по годам и исключим 2013 и 2014 годы, то Steven пропадет из матрицы.

Для сохранения полноты картины нужно учитывать всех сотрудников, даже если у него не было продаж за отчетный период. В таком случае вам придется использовать один из вариантов:

1) искусственно обогащать сырые данные нулевыми значениями для каждого года, в котором у сотрудника не было продаж;
2) фильтровать уже построенную матрицу путем удаления ненужных колонок.

В шаблоне отчета:

Шаблон отчёта

Для ячейки Year добавим событие BeforePrint:

Для ячейки Year добавляем событие BeforePrint

Со следующим кодом:

private int index = 1;
 private List<int> removeColumns = new List<int>();
 
 private void Cell4_BeforePrint(object sender, EventArgs e)
 { 
 if (new List<int>(){2013, 2014}.Contains((int)Cell4.Value))
 {
 removeColumns.Add(index); 
 }
 index++; 
 }

Здесь мы записали индексы колонок, которые хотим удалить. Теперь, для матрицы создадим обработчик события ModifyResult для редактирования уже построенного объекта “матрица”:

 private void Matrix1_ModifyResult(object sender, EventArgs e)
 {
 removeColumns.Reverse();
 foreach (int del in removeColumns)
 { 
 Matrix1.ResultTable.Columns.RemoveAt(del);
 }
 }

Так как при удалении колонок или строк, индекс всех последующих смещается, то нужно удалять с конца - с самого большого индекса. Поэтому был выстроен список индексов для удаления в обратном порядке с помощью метода Reverse(). Далее просто удалили колонки по соответствующим индексам. Давайте посмотрим, что получилось в итоге:

Итоговая таблица

Из матрицы пропали столбцы для 2013 и 2014 годов, но сотрудник Steven Buchanan остался. Желаемый эффект достигнут! Также, можно удалять ненужные вам строки воспользовавшись другой коллекцией -  Matrix1.ResultTable.Rows. Теперь вы знаете, как фильтровать матрицу, если фильтрация данных не подходит.

.NET .NET FastReport FastReport Фильтрация Фильтрация Матрица Матрица
13 октября 2025

Как использовать Excel формулы в отчете при экспорте в MS Excel

Начиная с версии FastReport .NET 2026.1 появилась возможность экспортировать формулы в Microsoft Excel. Важно правильно настроить экспорт формул и соблюдать синтаксис.
13 октября 2025

Новые возможности экспорта изображений в Microsoft Word в FastReport .NET

В последней версии FastReport .NET мы добавили новые функции экспорта изображений. Теперь можно самостоятельно настроить баланс между качеством и размером итогового документа.
30 сентября 2025

Как установить дизайнер отчетов FastReport .NET с предустановленными плагинами

Читайте в статье как с версии 2025.2.5 для FastReport .NET WinForms и FastReport .NET WEB можно установить дизайнер отчётов со всеми плагинами без сборки dll-файлов.

Не является публичной офертой
© 1998-2025 ООО «Быстрые отчеты»