FastReport .NET предоставляет множество вариантов доступа к данным и работы с ними: из базы данных, DataSet, JSON или с помощью бизнес-объектов (обычных классов C# в вашем приложении).
В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам (Категория -> Продукты).
Преимущества при использовании Business Objects (бизнес-объектов) в качестве источника данных:
1. Создайте классы моделей предварительно установив nuget пакет FastReport.Net.Demo (или же лицензионную версию FastReport.Net с нашего приватного nuget сервера). Пример:
public class Category { public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public List<Product> Products { get; set; } = new List<Product>(); public Category() { } public Category(string name, string description) { Name = name; Description = description; } } public class Product { public string Name { get; set; } = string.Empty; public decimal UnitPrice { get; set; } public Product() { } public Product(string name, decimal unitPrice) { Name = name; UnitPrice = unitPrice; } }
2. После чего приступим к реализации компактного метода для заполнения данных:
static private void CreateBusinessObject() { FBusinessObject.Clear(); Category category = new Category("Напитки", "Безалкогольные напитки, кофе, чай, пиво"); category.Products.Add(new Product("Чай пуэр", 18m)); category.Products.Add(new Product("Пиво", 19m)); category.Products.Add(new Product("Кофе крепкий", 46m)); FBusinessObject.Add(category); category = new Category("Кондитерские изделия", "Десерты, конфеты и сладкая выпечка"); category.Products.Add(new Product("Шоколад", 12.75m)); category.Products.Add(new Product("Шотландское печенье", 12.5m)); category.Products.Add(new Product("Сахарный пирог", 49.3m)); FBusinessObject.Add(category); category = new Category("Морепродукты", "Морские водоросли и рыба"); category.Products.Add(new Product("Мясо краба Бостон", 18.4m)); category.Products.Add(new Product("Красная икра", 15m));
3. Реализация отчета в дизайнере отчетов на основе источника данных Categories BusinessObject происходит следующим образом:
[STAThread] static void Main(string[] args) { Report report = new Report(); CreateBusinessObject(); report.RegisterData(FBusinessObject, "Categories BusinessObject"); report.Design(); }
Важно помнить, что вызов RegisterData должен происходить после загрузки отчета (report.Load) и до report.Prepare().
После запуска дизайнера отчетов Вам необходимо выбрать источник данных в меню «Data -> Choose Report Data (Данные -> Выбрать данные для отчета)».
Создадим простой отчет типа «Главный-подчиненный (Master-detail)», либо можно взять готовый пример из шаблонов демоотчетов.
И запускаем отчет в режиме предпросмотра как показано ниже:
4. Отображение готового отчёта при помощи консольного приложения (ConsoleApp) можно сделать с помощью этого кода:
[STAThread] static void Main(string[] args) { Report report = new Report(); report.Load(@"Business Objects.frx"); CreateBusinessObject(); report.RegisterData(FBusinessObject, "Categories BusinessObject"); report.Prepare(); report.Show(); report.Dispose(); }
static private List<Category> FBusinessObject = new List<Category>(); public Form1() { InitializeComponent(); CreateBusinessObject(); } static private void CreateBusinessObject() { FBusinessObject.Clear(); Category category = new Category("Напитки", "Безалкогольные напитки, кофе, чай, пиво"); category.Products.Add(new Product("Чай пуэр", 18m)); category.Products.Add(new Product("Пиво", 19m)); category.Products.Add(new Product("Кофе крепкий", 46m)); FBusinessObject.Add(category); category = new Category("Кондитерские изделия", "Десерты, конфеты и сладкая выпечка"); category.Products.Add(new Product("Шоколад", 12.75m)); category.Products.Add(new Product("Шотландское печенье", 12.5m)); category.Products.Add(new Product("Сахарный пирог", 49.3m)); FBusinessObject.Add(category); category = new Category("Морепродукты", "Морские водоросли и рыба"); category.Products.Add(new Product("Мясо краба Бостон", 18.4m)); category.Products.Add(new Product("Красная икра", 15m)); FBusinessObject.Add(category); } private void btnCreateNew_Click(object sender, EventArgs e) { // создать экземпляр отчёта Report report = new Report(); // зарегистрировать бизнес-объект report.RegisterData(FBusinessObject, "Categories BusinessObject"); // открыть дизайнер отчёта report.Design(); // освободить ресурсы, используемые отчётом report.Dispose(); } private void btnRunExisting_Click(object sender, EventArgs e) { // создать экземпляр отчёта Report report = new Report(); // загрузить существующий отчёт report.Load(@"..\..\Business Objects.frx"); // зарегистрировать бизнес-объект report.RegisterData(FBusinessObject, "Categories BusinessObject"); // запустить отчёт report.Show(); // освободить ресурсы, используемые отчётом report.Dispose(); } } public class Category { public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public List<Product> Products { get; set; } = new List<Product>(); public Category() { } public Category(string name, string description) { Name = name; Description = description; } } public class Product { public string Name { get; set; } = string.Empty; public decimal UnitPrice { get; set; } public Product() { } public Product(string name, decimal unitPrice) { Name = name; UnitPrice = unitPrice; } } public Product(string name, decimal unitPrice) { Name = name; UnitPrice = unitPrice; } }
Business Objects (бизнес-объекты) — это один из самых современных и удобных способов работы с данными в FastReport .NET. Он позволяет встраивать генерацию отчётов в существующую архитектуру приложения так, чтобы она не портила код и прибавляла удобства разработки.
Подход, подразумевающий использование Business Objects (бизнес-объектов), особенно настоятельно рекомендуется для средних и крупных проектов, где важно разделение ответственности, легкая поддержка, и скорость разработки новых отчётов.
Используя Business Objects (бизнес-объекты), вы получаете максимальную гибкость и контроль над тем, как данные попадают в отчёты.