Как хранить отчеты FastReport .Net в базе данных

28.02.2016

Обычно отчеты хранятся в одном месте, но в отдельных файлах. С ростом количества файлов появляются сложности в структурировании, поиске. Размышляя на эту тему, я наткнулся на одно очень интересное свойство объекта Report – ReportSourceString. В этом свойстве хранится весь шаблон отчета в строковом виде.

Исходя из этого, есть возможность хранить шаблоны отчета в любой базе данных. Мы получаем возможность хранить все отчеты в одном месте. …

Чтобы сохранять отчеты в базу данных, нам потребуется написать собственные методы сохранения и загрузки отчета.  Итак, приступим.

Прежде всего, создаем базу данных для хранения отчетов. Я использовал MS Access.

Таблица имеет следующую структуру:

Имя поля

Тип данных

id

Счетчик

Name

Текстовый

Template

Поле MEMO

 Создаем приложение WindowsForms. Добавляем подключение к нашей базе данных. На форме размещаем кнопку, компоненты DataSet, BindingSource и Report.

 

 

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

 

Для кнопок необходимо задать свойство DialogResult в соответствии с их названием.

Переходим к программированию. Используем следующие библиотеки FastReports:

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

 И создаем экземпляр диалоговой формы:

1
public SaveLoadForm form2 = new SaveLoadForm();

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void cmdSave_CustomAction(object sender, EventArgs e)
 
 {
 
 ReportsDataSet.ReportsRow row;
 
 row = reportsDataSet1.Reports.NewReportsRow();
 
 if (form2.ShowDialog() == DialogResult.OK)
 
 {
 
 row.Name = form2.ReportName;
 
 row.Template = report1.ReportResourceString;
 
 this.reportsDataSet1.Reports.Rows.Add(row);
 
 ReportsDataSetTableAdapters.ReportsTableAdapter adapter = new ReportsDataSetTableAdapters.ReportsTableAdapter();
 
 adapter.Update(reportsDataSet1.Reports);
 
 }
 
 }

  Здесь, мы создаем новую строку в таблице отчетов. Затем запускаем диалоговую форму. В форме будет вводиться имя отчета. Полю Name присваиваем значение из текстового поля диалоговой формы. А в поле Template записываем шаблон отчета в текстовом виде.

После этого, посредством адаптера, сохраняем изменения в таблице.

Теперь создаем обработчик события загрузки отчета:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void cmdOpen_CustomAction(object sender, EventArgs e)
 
 {
 
 if (form2.ShowDialog() == DialogResult.OK)
 
 {
 
 for (int i = 1; i < reportsDataSet1.Reports.Rows.Count; i++)
 
 if (reportsDataSet1.Reports[i].Name == form2.ReportName)
 
 {
 
 report1.ReportResourceString = reportsDataSet1.Reports[i].Template.ToString();
 
 }
 
 Designer designer = sender as Designer;
 
 
 
 designer.SetModified(this, "EditData");
 
 }
 
 }

 Мы также вызываем диалоговую форму. В цикле ищем отчет с именем, соответствующем введенному в текстовом поле. Из поля Template отчет загружается в свойство ReportResourceString. Затем, для отображения изменений, обновляется дизайнер.

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

1
2
3
4
5
6
7
8
9
 private void DesignerSettings_DesignerLoaded(object sender, EventArgs e)
 
 {
 
 (sender as Designer).cmdSaveAs.CustomAction += new EventHandler(cmdSave_CustomAction);
 
 (sender as Designer).cmdOpen.CustomAction += new EventHandler(cmdOpen_CustomAction);
 
 }

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

На событие нажатия кнопки в главной форме добавляем следующий код:

1
2
3
4
5
6
7
8
9
 private void DesignBtn_Click(object sender, EventArgs e)
 
 { 
 
 Config.DesignerSettings.DesignerLoaded += DesignerSettings_DesignerLoaded;
 
 report1.Design(); 
 
 }

 Переопределяем обработчик загрузки дизайнера отчетов.

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

.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 ООО «Быстрые отчеты»