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

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 Фильтрация Фильтрация Матрица Матрица
25 марта 2025

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

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

Как использовать FastReport .NET Avalonia на Fedora Workstation с протоколом Wayland

В данной статье мы разберем, как запустить FastReport .NET Avalonia на операционной системе «Fedora Workstation 39» с протоколом Wayland.
7 марта 2025

Как создать QR-код с картинкой в FastReport .NET

В статье разобрались как вставлять картинку в QR Code из дизайнера отчётов FastReport .NET всего за пару кликов.