Как сделать отчет типа Drill-Down

04.09.2019

Отчеты с группировкой просто необходимы для анализа данных. Но когда данных много и нет необходимости их все отображать обычный отчет с группировкой становится громоздким и избыточным. Хочется найти универсальное решение для таких случаев. И оно есть.

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

Рассмотрим на примере, как сделать такой отчет. Прежде всего, как и в отчете Master-Detail нам потребуется источник данных со связанными таблицами. Допустим, у нас есть две таблицы: customer и orders.

 

Один клиент может делать множество заказов. Связь один-ко-многим. Давайте добавим ее. Нажимаем кнопку Actions и выбираем из выпадающего списка New Relation …

 

Родительская таблица главная, значит выбираем customer. Дочерняя – соответственно orders. В customer есть первичный ключ CustNo. Выбираем его среди колонок. В orders есть внешний ключ CustNo. Также выбираем его.

В итоге мы получим связь:

 

Теперь приступим к созданию шаблона отчета. Добавим бэнд «Заголовок группы». На нем разместим поля из связи: orders.customer.Company, orders.customer.Addr1, orders.customer.Phone, orders.customer.Contact.

Помимо этих полей, добавим на этот бэнд элемент управления checkbox. В его свойстве CheckedSymbol выбираем Plus, а в UncheckedSymbol – Minus.

На бэнд «Данные» добавляем поля из таблицы orders: OrderNo, SaleDate, PaymentMethod, AmountPaid. Также, добавим заголовочный бэнд для данных и заголовки полей:

Сделайте двойной клик по заголовку бэнда «Заголовок группы». Выберите поле для группировки:

 

А теперь выбираем checkbox, который мы добавили раньше. Зададим ему свойство Hyperlink:

Выберите бэнд «Заголовок группы» и создайте для него обработчик события BeforePrint:

     

1
2
3
4
5
6
7
8
9
10
11
 private void GroupHeader1_BeforePrint(object sender, EventArgs e)
 {
 string groupName = (String)Report.GetColumnValue("orders.customer.Company");
 //получаем имя группы
 bool groupVisible = expandedGroups.Contains(groupName);
 //Проверяем видимость группы
 DataHeader1.Visible = groupVisible;
 Data1.Visible = groupVisible;// Устанавливаем видимость данных в соответствии с видимостью группы
 GroupFooter1.Visible = groupVisible;// Устанавливаем видимость подвала группы в соответствии с видимостью группы 
 CheckBox1.Checked = !groupVisible;//Устанавливаем состояние флажка в зависимости от видимости группы
 }

Также, добавим в класс список развернутых групп:

1
private List<string> expandedGroups = new List<string>();

Вернемся к нашему checkbox. Для него создадим обработчик события Click:

1
2
3
4
5
6
7
8
9
private void CheckBox1_Click(object sender, EventArgs e)
 {
 string groupName = (sender as CheckBoxObject).Hyperlink.Value; //Получаем имя группы из гиперссылки
 if (expandedGroups.Contains(groupName)) //Если список видимых групп содержит выбранную группу
 expandedGroups.Remove(groupName); //То удалить из списка видимых групп выбранную
 else
 expandedGroups.Add(groupName); //Иначе добавить группу в список видимых
 Report.Refresh(); //Обновить отчет
 }

Запустим отчет в режиме предварительного просмотра:

А теперь кликнем на какой-нибудь плюс:

При клике по минусу группа свернется. Согласитесь, очень удобно.

.NET FastReport .NET FastReport
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов.

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