Как предварительно зарегистрировать источник данных перед созданием нового отчета

11.07.2016

Чтобы передать источник данных в отчет, его необходимо предварительно зарегистрировать в отчете. Затем уже в самом отчете надо выбрать доступный источник из списка, и только после этого приступать к работе. Было бы здорово, чтобы источник данных был доступен сразу, стоит лишь открыть дизайнер отчета. А еще лучше, если в дизайнере отчета он будет уже выбран. Приступать к разработке отчета можно немедленно, не заботясь о данных.

Такой подход позволит избежать рутинной работы при массовой разработке отчетов.

Сделать регистрацию источника данных и автоматический его выбор в отчете при запуске дизайнера – задача не сложная. Основная проблема - сохранять зарегистрированный источник данных при создании нового отчета при помощи меню Файл.

Суть способа, который я хочу представить – перехватывать процесс создания нового отчета при использовании меню Файл.

Итак, рассмотрим все на примере. Создаем приложение с формой и одной кнопкой.

Для работы потребуются библиотеки:

1
2
3
4
5
using FastReport;
using FastReport.Utils;
using FastReport.Data;
using FastReport.Design;
using FastReport.Wizards;

 Объявляем источник данных и создаем его:

1
2
3
4
5
6
7
private DataSet FDataSet;
 
private void CreateDataSource()
 {
 FDataSet = new DataSet(); 
 FDataSet.ReadXml(Environment.CurrentDirectory + "//nwind.xml");
 }

 В данном случае, использовал базу данных XML из поставки FastReport .Net.

Создаем метод регистрации источника данных: 

1
2
3
4
5
6
7
8
9
private void RegisterData(Report FReport)
 {
 FReport.RegisterData(FDataSet, "NorthWind");
 // activate all data sources by default
 foreach (DataSourceBase source in FReport.Dictionary.DataSources)
 {
 source.Enabled = true;
 }
 }

 Здесь интересен цикл, который проходит по всем источникам данных, зарегистрированным в отчете, и активирует их. Таким образом, они будут сразу доступны в окне данных.

Вызываем обработчик события запуска дизайнера отчета:

1
2
3
4
private void DesignerSettings_DesignerLoaded(object sender, EventArgs e)
 {
 (sender as Designer).cmdNew.CustomAction += new EventHandler(cmdNew_CustomAction);
 }

 Добавляем пользовательский обработчик для события создания нового отчета через меню Файл.

Теперь нужно написать этот пользовательский обработчик. Он будет создавать новый пустой отчет с уже добавленным источником данных:

1
2
3
4
5
6
7
8
9
10
11
 void cmdNew_CustomAction(object sender, EventArgs e)
 {
 Designer designer = sender as Designer;
 //StandardReportWizard wizard = new StandardReportWizard(); // you can use any wizard form package
 BlankReportWizard wizard = new BlankReportWizard();
 wizard.Run(designer);
 
 RegisterData(designer.Report);
 // refresh data tree view
 designer.SetModified(this, "EditData");
 }

 Здесь мы создаем экземпляр объекта пустого отчета, либо запускаем «Мастер создания стандартного отчета», на выбор. Затем открываем новый отчет в дизайнере. Повторно регистрируем источник данных и обновляем список в дереве данных.

Осталось написать обработчик нажатия кнопки:    

1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, EventArgs e)
 {
 Report FReport = new Report();
 Config.DesignerSettings.DesignerLoaded += DesignerSettings_DesignerLoaded;
 CreateDataSource();
 
 // FReport.Load("myreport.frx"); // load report
 RegisterData(FReport); // register data before design
 FReport.Design();
 }

 Создаем экземпляр объекта отчета. Присваиваем обработчик загрузки дизайнера отчетов, который мы написали, вместо стандартного. Создаем источник данных. Теперь можно загрузить отчет, либо не делать этого. Тогда будет создан пустой. Обязательно перед вызовом дизайнера регистрируем данные.

Теперь при запуске дизайнера таблицы базы данных будут сразу отображаться в окне «Данные». Также и при создании нового отчета через меню Файл, источник данных будет добавлен.

В этой статье я показал, как перехватить процесс создания нового отчета, если создавать его через меню Файл. По такому же принципу можно перекрыть другие действия дизайнера, такие как Save.

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.