O FastReport .NET oferece diversas formas de acessar e trabalhar com dados, incluindo bancos de dados, DataSet, JSON e Business Objects (classes C# comuns na sua aplicação).
Este artigo demonstra um exemplo prático de criação e uso de um modelo de relatório .frx que se conecta a Business Objects hierárquicos (Categoria → Produtos).
Os Business Objects oferecem várias vantagens em relação às fontes de dados tradicionais:
Primeiro, instale o pacote NuGet FastReport.Net.Demo (ou a versão licenciada do FastReport.Net a partir do nosso servidor NuGet privado) e, em seguida, crie as seguintes classes de modelo:
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; } }
Em seguida, implemente um método simples para popular os dados:
static private void CreateBusinessObject() { FBusinessObject.Clear(); Category category = new Category("Beverages", "Soft drinks, coffees, teas, beers"); category.Products.Add(new Product("Chai", 18m)); category.Products.Add(new Product("Chang", 19m)); category.Products.Add(new Product("Ipoh coffee", 46m)); FBusinessObject.Add(category); 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); }
Para criar um relatório baseado na fonte de dados Categories BusinessObject, utilize o seguinte código:
[STAThread] static void Main(string[] args) { Report report = new Report(); CreateBusinessObject(); report.RegisterData(FBusinessObject, "Categories BusinessObject"); report.Design(); }
Importante: Chame RegisterData após carregar o relatório (report.Load) e antes de chamar report.Prepare().
Após iniciar o designer de relatórios, selecione a fonte de dados em "Data → Choose Report Data".
Em seguida, crie um relatório simples do tipo Master-Detail ou utilize um dos modelos de exemplo incluídos nos projetos demo do FastReport.
Quando o relatório estiver pronto, execute-o no modo Preview para verificar a saída.
Depois que o template do relatório for criado, você pode exibi-lo em uma aplicação Console usando o seguinte código:
[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(); }
public partial class Form1 : Form { static private List<Category> FBusinessObject = new List<Category>(); public Form1() { InitializeComponent(); CreateBusinessObject(); } private void CreateBusinessObject() { FBusinessObject.Clear(); Category category = new Category("Beverages", "Soft drinks, coffees, teas, beers"); category.Products.Add(new Product("Chai", 18m)); category.Products.Add(new Product("Chang", 19m)); category.Products.Add(new Product("Ipoh coffee", 46m)); FBusinessObject.Add(category); 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); } private void btnCreateNew_Click(object sender, EventArgs e) { // create report instance Report report = new Report(); // register the business object report.RegisterData(FBusinessObject, "Categories BusinessObject"); // design the report report.Design(); // free resources used by report report.Dispose(); } private void btnRunExisting_Click(object sender, EventArgs e) { // create report instance Report report = new Report(); // load the existing report report.Load(@"..\..\Business Objects.frx"); // register the business object report.RegisterData(FBusinessObject, "Categories BusinessObject"); // run the report report.Show(); // free resources used by report 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; } }
Os Business Objects são uma das formas mais modernas e convenientes de trabalhar com dados no FastReport .NET. Eles permitem integrar a geração de relatórios à arquitetura da sua aplicação de forma limpa e sustentável, sem introduzir complexidade desnecessária na base de código.
Essa abordagem é especialmente adequada para projetos de médio e grande porte, nos quais a separação clara de responsabilidades, a manutenibilidade e o desenvolvimento rápido de relatórios são essenciais.
Ao utilizar Business Objects, você obtém máxima flexibilidade e controle total sobre como os dados são fornecidos aos seus relatórios, mantendo a camada de relatórios alinhada ao modelo de domínio da sua aplicação.