杰瑞科技汇

fastreport 教程

FastReport 完全教程:从入门到精通

FastReport 是一个功能强大、灵活且易于使用的报表生成工具,支持 .NET, VCL, Java 等多种平台,它不仅可以生成静态报表,还能创建交互式、参数化、分组、主/明细等复杂报表。

fastreport 教程-图1
(图片来源网络,侵删)

目录

  1. 第一部分:FastReport 基础

    • 什么是 FastReport?
    • 为什么选择 FastReport?
    • 安装与准备
    • 核心概念:报表、数据、对象
  2. 第二部分:创建你的第一个报表

    • 步骤 1:创建新报表
    • 步骤 2:连接数据源
    • 步骤 3:设计报表布局
    • 步骤 4:预览和导出报表
  3. 第三部分:核心功能详解

    • 数据绑定:如何将数据与报表元素关联
    • 参数:实现动态和交互式报表
    • 变量:在报表中进行计算和统计
    • 分组:创建结构清晰的分组报表
    • 主/明细报表:处理多表关联数据
    • 条件格式:根据数据动态改变样式
  4. 第四部分:进阶技巧

    fastreport 教程-图2
    (图片来源网络,侵删)
    • 脚本编程:使用 C# 或 VB.NET 增强报表功能
    • 交叉表:创建数据透视表风格的报表
    • 条形码和二维码:添加识别码
    • 子报表:在报表中嵌入其他报表
    • 图表:将数据可视化
  5. 第五部分:在应用程序中使用报表

    • WinForms 集成
    • ASP.NET Web Forms 集成
    • ASP.NET Core 集成
    • Blazor 集成

第一部分:FastReport 基础

什么是 FastReport?

FastReport 是一个独立的报表生成器,它允许开发者或最终用户设计、生成和打印各种格式的报表,它提供了可视化的报表设计器,用户可以通过拖放控件来设计报表布局,无需编写大量代码。

为什么选择 FastReport?

  • 功能强大:支持几乎所有常见的报表类型,包括列表、分组、主/明细、交叉表、图表等。
  • 高度灵活:通过脚本编程,可以实现几乎任何自定义逻辑。
  • 易于集成:为所有主流 .NET 框架(WinForms, WPF, ASP.NET, Blazor)提供了预构建的控件,集成非常简单。
  • 多平台支持:除了 .NET,还支持 Delphi (VCL), C++ Builder, Java 等。
  • 丰富的导出格式:支持导出为 PDF, Excel, Word, HTML, Image, XML, CSV 等。

安装与准备

  1. 下载:访问 FastReport 官方网站 下载适合你平台的版本(.NET 版本)。
  2. 安装:按照安装向导完成安装,安装程序通常会自动将必要的 DLL 文件添加到 Visual Studio 的工具箱中。
  3. 验证:在 Visual Studio 中,右键点击工具箱 -> “选择项” -> “COM 组件” 或 “.NET Framework 组件”,确保能看到 FastReport 相关的控件(如 FastReport.Web, FastReport.Win 等)。

核心概念

  • 报表:一个 .frx 文件,是报表设计的核心,包含了所有数据、对象、脚本和布局信息。
  • 数据源:报表的数据来源,可以是:
    • DataSet:最常用的数据源,来自数据库查询或内存数据。
    • DataTable:DataSet 中的一个表。
    • IEnumerable / List:任何可枚举的集合。
    • XML:直接从 XML 文件读取数据。
  • 对象:报表设计器中的可视化元素,用于显示数据和装饰报表。
    • Text:用于显示文本,如标题、字段值。
    • Table:用于以表格形式显示数据。
    • Matrix:用于创建交叉表。
    • Picture:用于显示图片。
    • Barcode:用于生成条形码。
    • Line, Rectangle:用于绘制图形。

第二部分:创建你的第一个报表

我们将创建一个简单的列表报表,显示产品信息。

步骤 1:创建新报表

  1. 在 Visual Studio 中,右键你的项目 -> 添加 -> 新建项。
  2. 选择 "FastReport Report" (.frx 文件),命名为 ProductsReport.frx
  3. 这将打开 FastReport 的设计器界面。

步骤 2:连接数据源

假设你有一个 Products 表,包含 ID, ProductName, Price, Category 字段。

fastreport 教程-图3
(图片来源网络,侵删)
  1. 在设计器左侧的 "Data"(数据)窗口中,右键点击 "Report" -> "Add Data Source..."。
  2. 选择 "ADO.NET" 并点击 "OK"。
  3. 如果你的项目已经有 DataSet,可以直接选择它,如果没有,可以点击 "New Connection" 创建一个新的数据库连接,然后选择 Products 表。
  4. 成功添加后,你会看到 Products 表及其字段(ID, ProductName, Price, Category)。

步骤 3:设计报表布局

  1. 设置页面:点击设计器顶部的 "Page"(页面)选项卡,可以设置页面大小、方向、边距等。
    • 从工具箱中拖拽一个 Text 对象到报表的 "Page Header"(页眉)带区。
    • 双击该 Text 对象,输入 "产品列表"。
    • 你可以在属性窗口中修改字体、颜色、对齐方式等。
    • 在 "Page Header" 带区,再拖入 4 个 Text 对象,分别输入 "ID", "产品名称", "价格", "类别"。
    • 将它们水平对齐,形成表头。
  2. 添加数据字段
    • 切换到 "Data"(数据)窗口,将 Products 表中的 ID, ProductName, Price, Category 字段直接拖拽到报表的 "Data"(数据)带区。
    • FastReport 会自动为每个字段创建一个 Text 对象,并完成数据绑定。
    • 调整这些 Text 对象的位置,使其在表头下方对齐。
  3. 调整带区
    • "Page Header":每页顶部重复显示。
    • "Data":显示每一条记录的数据。
    • "Page Footer":每页底部显示,通常用于页码,拖入一个 Text 对象,输入 [Page] of [TotalPages]

步骤 4:预览和导出报表

  1. 点击设计器工具栏上的 "Preview"(预览)按钮(一个放大镜图标)。
  2. 你将看到一个预览窗口,显示生成的报表,可以在这里翻页、缩放。
  3. 在预览窗口的工具栏上,点击 "Export"(导出)按钮,选择你想要的格式(如 PDF, Excel),然后保存文件。

恭喜!你已经成功创建了你的第一个 FastReport 报表!


第三部分:核心功能详解

数据绑定

数据绑定是报表的灵魂,除了直接拖拽字段,你还可以:

  • 手动绑定:选中一个 Text 对象,在属性窗口的 "Data" 标签下,点击 "Expression"(表达式),然后从数据源中选择字段。
  • 表达式[Products.ProductName],方括号 [] 是 FastReport 中引用数据字段的标准语法。

参数

参数允许用户在运行时向报表传递值,实现动态筛选。

  1. 创建参数
    • 在设计器左侧,右键点击 "Parameters"(参数)-> "Add"。
    • 命名为 CategoryFilter,类型为 String
  2. 使用参数
    • 在 "Data" 带区,右键点击数据源(Products 表)-> "Edit..."。
    • 在弹出的窗口中,切换到 "Conditions"(条件)选项卡。
    • 点击 "Add",设置条件为 [Category] = [CategoryFilter]
    • 报表将只显示类别等于 CategoryFilter 参数值的记录。
  3. 传递参数
    • 在你的 C# 代码中,创建报表实例后,可以这样设置参数:
      Report report = new Report();
      report.Load("ProductsReport.frx");
      report.SetParameterValue("CategoryFilter", "电子产品"); // 传递值
      report.Prepare(); // 准备报表
      report.ShowPrepared(); // 显示预览

变量

变量用于在报表中进行计算,如求和、计数、平均值等。

  1. 创建变量
    • 在设计器左侧,右键点击 "Variables"(变量)-> "Add"。
    • 选择 "Sum"(求和),表达式为 [Products.Price],命名为 TotalPrice
  2. 显示变量
    • 在 "Report Footer"(报表页脚)带区,拖入一个 Text 对象。
    • 在其表达式中输入 [TotalPrice]
    • 你可以添加文本,如 "总价格: [TotalPrice]"。

FastReport 内置了许多常用变量,如 [Sum], [Count], [Average],你也可以直接使用它们。

分组

分组可以让报表结构更清晰,例如按类别对产品进行分组。

  1. 创建分组
    • 在设计器左侧,右键点击 "Groups"(分组)-> "Add"。
    • 在弹出的窗口中,选择数据源 Products,然后选择分组字段 [Category]
    • 点击 "OK"。
  2. 理解分组带区
    • 设计器上会出现两个新的带区:Header 1Footer 1
    • Header 1:在每个新的分组开始时显示,在这里可以显示类别名称。
    • Footer 1:在每个分组结束时显示,在这里可以计算并显示该分组的总价。
  3. 设计分组
    • Header 1 带区,拖入一个 Text 对象,表达式为 [Category]
    • Footer 1 带区,使用变量来显示分组的总价,你可能需要为每个组创建一个独立的求和变量。

主/明细报表

当需要展示一对多关系的数据时(如一个订单和它的多个订单项),主/明细报表非常有用。

  1. 设计主报表
    • 创建一个主报表文件,MasterReport.frx
    • 绑定主表数据(如 Orders 表),显示订单号、客户名等。
  2. 设计明细报表
    • 创建另一个报表文件,DetailReport.frx
    • 绑定明细表数据(如 OrderItems 表),显示产品、数量、单价等。
  3. 在主报表中嵌入明细报表
    • 打开 MasterReport.frx,在主表数据带区(Data 带区)的适当位置,从工具箱中拖入一个 Child 对象。
    • 选中 Child 对象,在属性窗口中设置其 "Report" 属性为 DetailReport.frx
    • 关键步骤:FastReport 需要知道如何将主表记录与明细表关联,通常这需要通过脚本或设置子报表的数据源来完成,在 MasterReport.frx 中,你可能需要为 Child 对象的 BeforePrint 事件编写脚本,动态地为子报表(DetailReport)设置数据筛选条件(OrderID = [MasterReport.Orders.ID])。

第四部分:进阶技巧

脚本编程

FastReport 使用 C# 或 VB.NET 作为其脚本语言。

  • 添加脚本:在设计器中,右键点击报表、带区或对象 -> "Script"。
  • 常用事件
    • Report.StartReport:报表开始执行前,适合初始化变量。
    • Band.BeforePrint:带区打印前,适合动态计算、修改对象属性。
    • Text.BeforePrint:Text 对象打印前,适合根据条件改变其值。
  • 示例:在 Text.BeforePrint 事件中,根据价格高低改变文本颜色:
    private void Text1_BeforePrint(object sender, EventArgs e)
    {
        // [Price] 是绑定的字段
        if (Convert.ToDecimal([Price]) > 1000)
        {
            this.Text1.ForeColor = System.Drawing.Color.Red;
        }
        else
        {
            this.Text1.ForeColor = System.Drawing.Color.Black;
        }
    }

交叉表

交叉表(Matrix)用于对数据进行汇总分析,类似 Excel 的数据透视表。

  1. 从工具箱中拖拽一个 Matrix 对象到报表中。
  2. :将一个字段(如 Category)拖到矩阵的 "Row" 区域。
  3. :将另一个字段(如 Year)拖到矩阵的 "Column" 区域。
  4. :将需要汇总的字段(如 Price)拖到矩阵的 "Value" 区域。
  5. FastReport 会自动对值进行求和,你可以在属性中更改聚合方式(求和、计数、平均值等)。

条件格式

除了通过脚本改变样式,FastReport 还提供了更简单的条件格式功能。

  1. 选中一个 Text 对象。
  2. 在属性窗口中,找到 "Conditions"(条件)选项卡。
  3. 点击 "Add",设置一个条件([Price] > 1000)。
  4. 在 "Style"(样式)中,设置满足条件时的字体颜色、背景色等。

第五部分:在应用程序中使用报表

这里以最常用的 WinForms 为例。

添加引用和控件

  1. 在你的项目中,通过 NuGet 包管理器安装 FastReport.Windows 包。
  2. 在窗体上,从工具箱中拖入一个 FastReportPreviewControl 控件。

C# 代码示例

using System;
using System.Data;
using System.Windows.Forms;
using FastReport; // 引入 FastReport 命名空间
namespace WinFormsApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        private void btnGenerateReport_Click(object sender, EventArgs e)
        {
            // 1. 创建报表对象
            Report report = new Report();
            // 2. 加载报表模板文件 (.frx)
            report.Load("ProductsReport.frx");
            // 3. (可选) 准备数据
            // 这里假设你有一个 GetData() 方法来填充 DataSet
            DataSet data = GetData(); 
            report.RegisterData(data, "Products"); // 注册数据源,"Products" 是你在 .frx 中使用的名称
            // 4. (可选) 设置参数
            report.SetParameterValue("CategoryFilter", "电子产品");
            // 5. 准备报表
            report.Prepare();
            // 6. 将准备好的报表分配给预览控件
            fastReportPreviewControl1.Report = report;
            // 7. 或者直接显示预览窗口 (另一种方式)
            // report.ShowPrevised(); // 这会弹出一个独立的预览窗口
        }
        private DataSet GetData()
        {
            // 这里应该是从数据库或其他数据源获取数据的逻辑
            // 为了示例,我们创建一个临时的 DataTable
            DataTable dt = new DataTable("Products");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("ProductName", typeof(string));
            dt.Columns.Add("Price", typeof(decimal));
            dt.Columns.Add("Category", typeof(string));
            dt.Rows.Add(1, "笔记本电脑", 5999.99, "电子产品");
            dt.Rows.Add(2, "办公椅", 899.50, "家具");
            dt.Rows.Add(3, "无线鼠标", 199.00, "电子产品");
            dt.Rows.Add(4, "台灯", 159.90, "家具");
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }
    }
}

总结与学习资源

  • 核心思想:FastReport 的核心是 .frx 文件,它是一个独立的报表定义,你的应用程序主要负责加载这个文件、提供数据、设置参数,然后调用 Prepare()ShowPrevised() 来生成和显示报表。
  • 官方资源
    • FastReport 官方文档:最权威、最全面的学习资料,包含所有函数、属性和事件的说明。
    • FastReport 示例:官方提供了大量示例项目,是学习高级功能的最佳途径。
    • FastReport 论坛:遇到问题时,可以在论坛寻求帮助。

这份教程为你提供了一个坚实的起点,FastReport 的功能非常丰富,最好的学习方式就是 动手实践,尝试创建不同类型的报表,探索各种对象和事件,你会发现它是一个能极大提升你开发效率的强大工具。

分享:
扫描分享到社交APP
上一篇
下一篇