杰瑞科技汇

FastReport教程从哪开始学?新手入门指南看这里!

FastReport 全方位教程:从入门到精通

FastReport 是一个功能强大、灵活且易于使用的报表生成器,支持 .NET, VCL, Java 等多种平台,它以其“代码优先”(Code-First)的设计理念而闻名,允许开发者在不使用复杂设计器的情况下,通过代码动态创建和修改报表。

FastReport教程从哪开始学?新手入门指南看这里!-图1
(图片来源网络,侵删)

第一部分:入门基础

什么是 FastReport?

FastReport 是一个独立的报表生成工具和类库,它的核心优势在于:

  • 跨平台:支持 Windows (VCL, .NET WinForms, WPF), Linux, macOS, Web (ASP.NET Core, Blazor) 和移动端。
  • 灵活性:既可以像 Word 一样“所见即所得”地设计报表,也可以通过 C# 或 VB.NET 代码完全在后台动态生成。
  • 丰富功能:支持条形码、二维码、图表、交叉表、条带、矩阵、数据源(ADO.NET, LINQ, JSON, XML 等)等。
  • 高性能:专为处理大量数据而优化。

安装 FastReport

  • NuGet 包管理器(推荐):在 Visual Studio 中,通过 NuGet 包管理器控制台或界面安装 FastReportFastReport.OpenSource (开源版本)。
    Install-Package FastReport
  • 安装程序:从 FastReport 官网下载安装程序,安装后会在 Visual Studio 中集成报表设计器。

核心概念

在开始之前,必须理解 FastReport 的几个核心对象:

  • Report:报表对象,是所有报表元素的容器,它定义了报表的整体结构、数据源和事件处理。
  • DataBand:数据带,这是报表的核心,它会遍历数据源中的每一行记录,并为每一行重复其内部的控件,一个客户列表报表,DataBand 会为每个客户生成一行信息。
  • TextObject:文本对象,用于在报表上显示静态文本(如“标题:”)或绑定到数据字段的动态文本(如 [CustomerName])。
  • PageHeaderBand / PageFooterBand:页眉/页脚带,每一页的顶部和底部都会显示一次,通常用于显示页码、公司Logo、标题等。
  • ReportHeaderBand / ReportFooterBand:报表头/报表尾,整个报表的开始和结束处只显示一次,通常用于显示报表总标题和总结信息。
  • PictureObject:图片对象,用于显示图片,可以是静态的,也可以从数据库中动态加载。
  • BarCodeObject:条码对象,用于生成各种类型的条码。
  • DataTable:数据表,FastReport 使用自己的 DataTable 对象作为数据源,你可以将 ADO.NETDataTableList<T>JSON 字符串等填充到 FastReport.Data 命名空间下的 DataTable 中。

第二部分:创建你的第一个报表(设计器模式)

这是最直观的方式,适合初学者快速上手。

步骤 1:创建报表文件

  1. 在 Visual Studio 中,右键你的项目 -> 添加 -> 新建项。
  2. 选择 "FastReport Report" (.frx 文件),命名为 Report.frx

步骤 2:设计报表布局

  1. 添加页眉:从工具箱中拖拽 TextObjectPageHeaderBand 中,输入“客户列表”。
  2. 添加数据字段
    • 从 "Data" 窗口(通常在右侧)中,添加一个数据源,最简单的是添加一个 DataTable
    • Data 窗口中右键 -> Add -> Data Source -> 选择 "DataTable"。
    • 右键新建的 DataTable -> Edit,添加几列,如 ID, Name, City
    • DataTable 的字段(如 Name, City)直接拖拽到 DataBand 中,FastReport 会自动为你创建 TextObject 并绑定字段。
  3. 添加页脚:拖拽一个 TextObjectPageFooterBand 中,双击它,在属性窗口中找到 "Text" 属性,输入 [Page#] 来显示页码。

步骤 3:预览报表

  1. 在 Visual Studio 工具栏中,你会看到一个 "Preview" 按钮(通常是一个放大镜图标)。
  2. 点击它,FastReport 的预览窗口将会弹出,显示你设计的报表。

第三部分:在代码中动态使用报表

这是 FastReport 的强大之处,也是开发者最常用的方式。

FastReport教程从哪开始学?新手入门指南看这里!-图2
(图片来源网络,侵删)

步骤 1:准备数据

假设你有一个 Customer 类和一个 List<Customer>

public class Customer
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string City { get; set; }
}
// 在你的窗体或控制器代码中
var customers = new List<Customer>
{
    new Customer { ID = 1, Name = "张三", City = "北京" },
    new Customer { ID = 2, Name = "李四", City = "上海" },
    new Customer { ID = 3, Name = "王五", City = "广州" }
};

步骤 2:加载报表并填充数据

// 1. 创建报表对象
Report report = new Report();
// 2. 加载 .frx 报表文件
//    假设 Report.frx 文件已添加到项目的 "根目录" 或 "报表" 文件夹中,并设置为 "如果较新则复制"
report.Load("Report.frx"); 
// 3. 准备 FastReport 的数据源
//    将我们的 List<Customer> 转换为 FastReport 的 DataTable
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("City", typeof(string));
foreach (var customer in customers)
{
    dt.Rows.Add(customer.ID, customer.Name, customer.City);
}
// 4. 将数据注册到报表中
//    "Customers" 是我们在报表设计器中给数据源起的名字
report.RegisterData(dt, "Customers");
// 5. 预览报表
//    这会打开一个独立的预览窗口
report.Prepare();
report.Show(); 

关键点

  • report.RegisterData(dt, "Customers") 中的第二个参数 "Customers" 必须与你在报表设计器中给 DataTable 起的名字完全一致。
  • 如果没有 .frx 文件,你可以完全用代码创建报表(见第四部分)。

第四部分:高级技巧与常用功能

参数化报表

允许在运行时向报表传递值,例如按城市筛选客户。

代码端

// 1. 在报表中定义参数 (通常在报表设计器的 "Data" -> "Parameters" 中添加)
//    假设参数名为 "CityParam"
// 2. 在代码中设置参数值
report.SetParameterValue("CityParam", "北京"); // 传递参数值
// 3. 在报表设计器中使用参数
//    在 DataBand 的 "Filter" 属性中,可以写:[Customers.City] = '[CityParam]'

条件格式

根据数据值改变控件的样式(如字体颜色、背景色)。

操作

  1. 选中 TextObject (例如显示 City 的文本框)。
  2. 在属性窗口中找到 "Conditions"。
  3. 添加一个新条件。
  4. 设置条件表达式,[Customers.City] = '北京'
  5. 设置满足条件时的样式,比如将 Font.Color 设置为红色。

图片动态加载

从数据库或文件路径加载图片。

代码端

// 假设 Customer 类有一个 ImagePath 属性
var customersWithImages = new List<Customer>
{
    new Customer { ID = 1, Name = "张三", City = "北京", ImagePath = "logo.png" }
};
// ... (前面的代码相同)
// 在 Prepare() 之前,注册图片数据
report.PictureTable.Add("logo.png", System.Drawing.Image.FromFile("logo.png"));
// 在报表设计器中:
// 1. 添加一个 PictureObject 到 DataBand。
// 2. 在其属性中,设置 "Image" 属性为表达式:[PictureTable.Image('logo.png')]
//    或者,如果你的数据源中有图片路径,可以写:[PictureTable.Image([Customers.ImagePath])]

子报表

在一个报表中嵌套另一个报表。

操作

  1. 在主报表的 DataBand 中,拖入一个 ChildObject
  2. ChildObject 的属性中,指定要加载的子报表文件名(如 SubReport.frx)。
  3. 子报表会自动继承主报表的数据源,你也可以在子报表中定义自己的数据源。

事件处理

使用 C# 代码控制报表的生成过程。

// 在 Prepare() 之前注册事件
report.BeforePagesAdd += Report_BeforePagesAdd;
// ...
private void Report_BeforePagesAdd(object sender, EventArgs e)
{
    // 在生成每一页之前触发
    // 可以在这里动态修改报表内容
    // 获取报表标题文本框并修改其值
    TextObject title = report.FindObject("txtReportTitle") as TextObject;
    if (title != null)
    {
        title.Text = "动态生成的报表标题 - " + DateTime.Now.ToString();
    }
}

导出报表

FastReport 可以将报表导出为多种格式。

// 在 Prepare() 之后
report.Prepare();
// 导出到 PDF 文件
report.Export(new PDFExport(), "MyReport.pdf");
// 导出到 Excel 文件
report.Export(new ExcelExport(), "MyReport.xlsx");
// 导出到 HTML 文件
report.Export(new HTMLExport(), "MyReport.html");

第五部分:最佳实践与提示

  1. 分层设计:对于复杂报表,将主报表、子报表、参数、数据源等分开管理,使结构更清晰。
  2. 命名规范:为报表、数据源、参数、控件等使用有意义的名称,方便后期维护。
  3. 使用脚本:FastReport 内置了脚本引擎(PascalScript),可以在报表设计器中编写复杂的逻辑,而无需修改 C# 代码,在 DataBandOnBeforePrint 事件中编写脚本。
  4. 性能优化
    • 只注册和加载需要的数据。
    • 对于大数据量,考虑使用 DataBandKeepTogether 属性来控制分页逻辑,避免大块数据被分割到两页。
    • 避免在报表循环中进行复杂的计算,尽量在数据加载前完成。
  5. 资源管理:在使用完 Report 对象后,最好调用 Dispose() 方法,释放资源。

第六部分:学习资源

  • 官方文档:FastReport 官网提供了最权威、最全面的文档和示例。
  • 官方示例:安装 FastReport 后,通常会附带大量示例项目,是学习高级功能的最佳途径。
  • 视频教程:在 YouTube 和 Bilibili 等平台搜索 "FastReport 教程",可以找到很多视频演示。
  • 社区支持:FastReport 官方论坛和 Stack Overflow 上有大量开发者可以提问和交流。

希望这份详细的教程能帮助你快速掌握 FastReport!从简单的拖拽设计开始,逐步尝试代码动态生成,你会发现它是一个能极大提升你项目报表能力的强大工具。

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