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

18.04.2016

Большинство современных генераторов отчетов позволяют использовать практические любые базы данных. Однако, мало какой генератор может работать со списками или массивами объектов в качестве источника данных. В этой статье я покажу как это делается на примере генератора отчетов FastReport .Net.

Отмечу некоторые важные моменты:

  • поля объекта из списка должны быть описаны как public свойства, чтобы они были видны в отчете;
  • кроме списков можно передавать в отчет данные из любых iEnumerable коллекций;
  • для передачи в отчет результатов linq запросов нужно преобразовать список с помощью метода ToArray.

Создадим приложение WindowsForms.

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

Объявляем переменные:       

1
2
 private List<Category> FBusinessObject;
 private Report FReport;

Из названий понятно, что это: список категорий и объект отчета.

Итак, добавим класс продуктов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public class Product
 {
 private string FName;
 private decimal FUnitPrice;
 
 public string Name
 {
 get { return FName; }
 }
 
 public decimal UnitPrice
 {
 get { return FUnitPrice; }
 }
 
 public Product(string name, decimal unitPrice)
 {
 FName = name;
 FUnitPrice = unitPrice;
 }
 }

Как видим, поля объекта объявлены как public.

Теперь добавим класс категорий:

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
public class Category
 {
 private string FName;
 private string FDescription;
 private List<Product> FProducts;
 
 public string Name
 {
 get { return FName; }
 }
 
 public string Description
 {
 get { return FDescription; }
 }
 
 public List<Product> Products
 {
 get { return FProducts; }
 }
 
 public Category(string name, string description)
 {
 FName = name;
 FDescription = description;
 FProducts = new List<Product>();
 }
 }

Одно из полей объекта Category – список продуктов. То есть список категорий представляет собой массив массивов.

Переходим к созданию источника данных:

      

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public void CreateDataSource()
 {
 FBusinessObject = new List<Category>(); //Create list of categories
 
 Category category = new Category("Beverages", "Soft drinks, coffees, teas, beers"); //Create new instance of category
 category.Products.Add(new Product("Chai", 18m)); //Add new product to category
 category.Products.Add(new Product("Chang", 19m));
 category.Products.Add(new Product("Ipoh coffee", 46m));
 
 FBusinessObject.Add(category); //Add the category to the List
 
 category = new Category("Confections", "Desserts, candies, and sweet breads");
 category.Products.Add(new Product("Chocolade", 12.75m));
 category.Products.Add(new Product("Scottish Longbreads", 12.5m));
 category.Products.Add(new Product("Tarte au sucre", 49.3m));
 
 FBusinessObject.Add(category);
 
 category = new Category("Seafood", "Seaweed and fish");
 category.Products.Add(new Product("Boston Crab Meat", 18.4m));
 category.Products.Add(new Product("Red caviar", 15m));
 
 FBusinessObject.Add(category);
 }

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

Мы создали источник данных. Теперь его нужно зарегистрировать в отчете с помощью метода RegisterData:

1
2
3
4
 public void RegisterData()
 {
 FReport.RegisterData(FBusinessObject, "Categories");
 }

Этот метод сделает наш список доступным в отчете под именем: “Categories”.

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

1
2
3
4
5
6
7
 public void DesignReport()
 {
 FReport = new Report();
 CreateDataSource();
 RegisterData();
 FReport.Design();
 }

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

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

1
2
3
4
 public void button1_Click(object sender, EventArgs e)
 {
 DesignReport();
 }

В дизайнере отчетов необходимо выбрать источник данных в меню Data -> Choose Report Data…

 

Создаем простой отчет типа Master-Detail:

 

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

 

Подведем итоги. FastReport .Net еще раз доказал, что это гибкий, современный продукт. Вы можете использовать нужные данные из своего приложения, не заботясь о преобразовании их в DataTable.

20 ноября 2024

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

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

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

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

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

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