FastReport.NET 2023 用户自定义报表配置详解
前言
本文将详细介绍FastReport.NET 2023 用户自定义报表、报表配置详解。
CSFrameworkV6旗舰版集成用户自定义报表配置(2024新功能),为前端实施人员提供强大技术支持。
完整源码:CSFrameworkV6.DemoReportModule.frmUserCustomReport.cs
一、初始化报表设计器数据源
内容包括:
- 报表设计器环境设置;
- 报表设计器数据库连接字符串;
- 注册实体对象列表作为报表数据源;
- 注册DataTable作为报表数据源;
- 用户自定义SQL查询作为报表数据源;
- 带参数的SQL查询作为报表数据源;
- 存储过程数据源;
二、报表设计器事件变更
重写报表设计器的【保存】、【另存为】按钮事件
C# 全选
//报表设计器的保存按钮默认是保存报表文件
FastReport.Utils.Config.DesignerSettings.CustomSaveDialog += OnOpenSaveDialogEventHandler;
FastReport.Utils.Config.DesignerSettings.CustomSaveReport += OnSaveReportEventHandler;
重写【保存】事件,点【保存】按钮将报表模板存储到数据库。注:报表设计器默认是存储本地frx文件。
C# 全选
/// <summary>
/// 保存报表模板到数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnSaveReportEventHandler(object sender, OpenSaveReportEventArgs e)
{
//报表模板输出内存流
using (MemoryStream ms = new MemoryStream())
{
e.Report.Designer.Report.Save(ms);
_ReportData.Data = ms.ToArray();
var ok = new bllReports().Update(MasterDataUpdate<sys_Reports>.ForEdit(_ReportData));
if (ok)
{
_ReportData.IsNewReport = false;
e.Report.Designer.AskSave = false;
}
}
}
三、CSFrameworkV6:用户自定义配置报表(新)
CSFrameworkV6旗舰版开发框架提供两种报表场景:
1、开发者配置
开发人员根据用户需求定制各种复杂报表,比如主从表、图片数据报表、复杂业务数据报表。
特点:
- 由开发人员编写程序开发的报表;
- 硬编码,需要根据业务需求编写代码来实现报表;
- 适合开发业务复杂的报表;
- 升级报表、修改报表需要发布版本给用户升降;
2、实施人员配置
实施人员在生产现场可实时配置各种报表,比如较简单的单表报表。
特点:
- 实施人员使用;
- 不需要编写任何代码;
- 适合配置较简单的单表数据源报表。
3、销售订单提供Demo
1、开发者配置 - 【打印】按钮(复杂报表)
2、实施人员配置报表 - List 数据源报表Demo
点按钮打开报表窗体,代码参考:
C# 全选
private void btnReportDemoByList_Click(object sender, EventArgs e)
{
//Demo1:传入List<T>数据源
var list = gvSummary.GetDataSource<res_SO>();
var row = gvSummary.GetRow<res_SO>();
frmUserCustomReport.ExecuteByList(this.GetType().FullName, list,
(report, reportData) =>
{
report.SetParameterValue("pSONO", row.SONO);//设置报表参数
report.SetParameterValue("ProductCode", "BOX");//设置报表参数
//if (reportData.ReportTitle == "带参数报表")
//{
// report.SetParameterValue("pSONO", row.SONO);//设置报表参数
//}
});
}
3、实施人员配置报表 - DataTable 数据源报表Demo
点按钮打开报表窗体,代码参考:
C# 全选
private void btnReportDemoByDataTable_Click(object sender, EventArgs e)
{
//Demo2: 传入DataTable数据源
var list = gvSummary.GetDataSource<res_SO>();
var row = gvSummary.GetRow<res_SO>();
//DataTable数据源
DataTable dt = list.ToDataTable();
frmUserCustomReport.ExecuteByDataTable(this.GetType().FullName, dt,
(report, reportData) =>
{
report.SetParameterValue("pSONO", row.SONO);//设置报表参数
report.SetParameterValue("ProductCode", "BOX");//设置报表参数
//if (reportData.ReportTitle == "带参数报表")
//{
// report.SetParameterValue("pSONO", row.SONO);//设置报表参数
//}
});
}
4、新增报表
模拟实施人员添加新的报表。点【新增报表】按钮:
- 拥有者:报表所属业务名称,或功能窗体名称。
- 报表编号:系统自动生成的唯一序号。
- 报表源:报表数据来源,开发框架提供2个报表源:业务账套库、系统数据库。
- 报表标题:报表名称、报表标题。
- 报表文件名:FastReport.Net报表文件名称。
- 表名/别名:数据源表名、别名。作为报表模板内定义标签的标识,如:[M.CustomerName],M即为表名或别名。
- 版本:系统自动生成的唯一序号。
- 报表序号:一个业务功能可能有多个用户自定义报表,作为排序使用。
- 自定义SQL查询报表:如勾选,表示当前报表采用自定义SQL查询作为报表数据源。特点:不需要注册数据源(Report.RegisterData方法)
- 自定义SQL查询报表(带参数):如勾选,表示当前报表采用自定义SQL查询(并且指定1个或多个参数)作为报表数据源。特点:不需要注册数据源(Report.RegisterData方法)
提示
表名/别名:在报表设计器添加的数据源名称保持一致。参考:
5、设计报表
在报表清单选择一个报表项,点【报表设计】按钮:
展开 NewReport 报表数据源,拖拽字段到报表区域:
报表设计完成,点工具栏【保存】按钮,保存报表到数据库。
关闭报表设计器,点【预览】按钮。
四、CSFrameworkV6集成报表配置(2024新功能)
4.1、CSFrameworkV6_Normal数据sys_Reports表增加6个字段
4.2、sys_Reports 模型增加对应的6个属性
C# 全选
/// <summary>
/// 报表拥有者(NS=namespace,使用命名空间全称标识)
/// </summary>
public System.String OwnerFormNS { get; set; }
/// <summary>
/// 报表数据源账套类型。分为:系统数据库、业务账套库
/// </summary>
public System.String DataSourceType { get; set; }
/// <summary>
/// 表名。对应报表模板使用的表名,如:[tb_Customer.CustomerCode],tb_Customer既表名。<br>
/// 默认为当前数据源的表名或实体模型名称。
/// </summary>
public string TableName { get; set; }
/// <summary>
/// 用户自定义报表(实施人员)
/// </summary>
public System.String FlagUserCustom { get; set; }
/// <summary>
/// 标记该报表是用户自定义Sql查询报表
/// </summary>
public System.String FlagSqlQuery { get; set; }
/// <summary>
/// 标记该报表是用户自定义Sql查询报表,并且带有一个固定参数
/// </summary>
public System.String FlagSqlParam { get; set; }
4.3、调用通用自定义报表窗体
参考frmSO窗体的2个按钮事件:
4.4、报表模块增加2个窗体
五、报表例子
CSFrameworkV6旗舰版《销售订单》功能提供以下完整例子。
表格数据源 - 9999
以销售订单当前查询表格的数据作为报表数据源。
设计器:
表格数据源 - 销售单2
以销售订单当前查询表格的数据作为报表数据源。
SQL查询报表(BySQL)
设计器:
SQL查询带参数报表(BySQL & ByParam)
设计器:
给参数赋值:
C# 全选
private void btnReportDemoByList_Click(object sender, EventArgs e)
{
//Demo1:传入List<T>数据源
var list = gvSummary.GetDataSource<res_SO>();
var row = gvSummary.GetRow<res_SO>();
frmUserCustomReport.ExecuteByList(this.GetType().FullName, list,
(report, reportData) =>
{
report.SetParameterValue("pSONO", row.SONO);//设置报表参数
report.SetParameterValue("ProductCode", "BOX");//设置报表参数
//if (reportData.ReportTitle == "带参数报表")
//{
// report.SetParameterValue("pSONO", row.SONO);//设置报表参数
//}
});
}
存储过程查询带参数报表(BySQL & ByParam)
设计器:
给参数赋值:参考本文的代码。
C# 全选
report.SetParameterValue("ProductCode", "BOX");//设置报表参数
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网