Когда лучше использовать отчет из кода, а когда в формате frx

29.02.2020

Как вы, наверное, знаете отчеты в FastReport .NET можно создавать не только в специальном дизайнере, но и программно, из кода пользовательского приложения. При этом, вместо привычного файла с расширением frx вы получите класс отчета. Его можно преобразовать в библиотеку и использовать в разных проектах. Что из себя представляет такой способ создания отчета?

Взгляните на этот код:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 //Create instance of class Report
 Report report = new Report();
 
 //load data
 DataSet ds = new DataSet();
 ds.ReadXml(AppFolder + "\\nwind.xml");
 
 //Register data source
 report.RegisterData(ds);
 
 //Enable data table
 report.GetDataSource("Products").Enabled = true;
 
 //Add report page
 ReportPage page = new ReportPage();
 report.Pages.Add(page);
 page.CreateUniqueName();
 
 //Create GroupHeader band
 GroupHeaderBand group = new GroupHeaderBand();
 page.Bands.Add(group);
 group.CreateUniqueName();
 group.Height = Units.Centimeters * 1;
 group.Condition = "[Products.ProductName].Substring(0,1)";
 group.SortOrder = FastReport.SortOrder.Ascending;
 
 // create group text
 TextObject groupTxt = new TextObject();
 groupTxt.Parent = group;
 groupTxt.CreateUniqueName();
 groupTxt.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 1);
 groupTxt.Text = "[[Products.ProductName].Substring(0,1)]";
 groupTxt.Font = new Font("Arial", 14, FontStyle.Bold); 
 groupTxt.VertAlign = VertAlign.Center;
 groupTxt.Fill = new LinearGradientFill(Color.LightGoldenrodYellow, Color.Gold, 90, 0.5f, 1);
 
 // create data band
 DataBand data = new DataBand();
 group.Data = data;
 data.CreateUniqueName();
 data.DataSource = report.GetDataSource("Products");
 data.Height = Units.Centimeters * 0.5f;
 
 // create product name text
 TextObject productText = new TextObject();
 productText.Parent = data;
 productText.CreateUniqueName();
 productText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
 productText.Text = "[Products.ProductName]";
 
 // create group footer
 group.GroupFooter = new GroupFooterBand();
 group.GroupFooter.CreateUniqueName();
 group.GroupFooter.Height = Units.Centimeters * 1;
 
 if (PDFCheckBox.Checked)
 {
 report.Prepare();
 FastReport.Export.Pdf.PDFExport export = new FastReport.Export.Pdf.PDFExport();
 export.Export(report);
 }
 else
 report.Show();

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

Главное преимущество отчета, создаваемого в коде -  возможность редактировать отчеты во время выполнения, добавляя код в зависимости от условий или событий. Это позволяет создавать отчеты со сложной логикой, напрямую зависящей от самого клиентского приложения.

Не секрет, что шаблоны отчетов FastReport .NET имеют xml-подобный формат, несмотря на расширение frx. Такие шаблоны легко передавать и просматривать на других компьютерах с помощью программы-просмотрщика. Мобильность и независимость от клиентских приложений - это неоспоримые преимущества традиционного шаблона отчета в формате frx, или его версии с заполненными данными в формате fpx. Поэтому, имея в своем приложении отчеты, созданные из кода, многие хотели бы иметь возможность преобразовать их в обычный xml-подобный формат frx. Сделать это невероятно просто:

1
2
Report report = new Report();
report.Save("C:\\report.frx");

То есть нужно просто использовать функцию Save у объекта report. В качестве параметра передаем путь с именем файла, в который будет сохранен отчет. Таким образом мы можем использовать один отчет, создаваемый из кода, а, при необходимости, преобразовывать его в традиционный формат frx. Полученный файл можно передавать другим разработчикам, или пользователям.

Как на отчеты основе кода, так и на отчеты в формате frx имеют свои преимущества. Первый – выигрывает, когда отчет нужно изменять прямо «на ходу», второй – когда требуется мобильный отчет, или шаблон имеет много элементов с четко определённым их расположением друг относительно друга.  Нужно выбирать способ создания отчета на основе этих преимуществ.

.NET FastReport Отчет .NET FastReport Отчет
11 марта 2025

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

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

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

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

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

В этой статье мы рассмотрим, как интегрировать матричный принтер в процесс создания и вывода отчетов с использованием FastReport .NET.