文章目录
1、序言
现有的产品上都是使用的传入DataSet或List数据源,而我接触的时候就思考了一个问题,其实这样对报表或者单据带来了耦合性,面对客户需求的时候显得不够灵活,都需要改源代码来处理。
2、操作数据源
2.1 新建数据源

2.2 新建链接

2.3 选择表或SQL查询

2.3.1 表
这里选择AbpUsers表。


设计报表,使用Table进行展示

单元格绑定数据源直接从数据源中推拽过来即可。
注意:这样只会显示第一条数据,需要使用代码遍历打印。
对Table组件的ManualBuild事件进行遍历打印
namespace FastReport
{
public class ReportScript
{
private void tableStantard_ManualBuild(object sender, EventArgs e)
{
DataSourceBase data1 = Report.GetDataSource("AbpUsers"); // 获取DataSet中表名为Table1的数据源
data1.Init(); // 初始化
tableStantard.PrintRow(0); // 控件Table打印第0行
tableStantard.PrintColumns(); // 每打印一行,都要调用 PrintColumn或PrintColumns
while(data1.HasMoreRows) // 打印重复循环的行
{
tableStantard.PrintRow(1);
tableStantard.PrintColumns();
data1.Next(); // 读取下一行
}
}
}
}
预览(Ctrl+P)效果

2.3.2 SQL查询
2.3.2.1 选择表

2.3.2.2 输入SQL语句
输入SQL语句的时候也可以使用查询分析器进行设计,与SSMS工具创建视图可视化时类似。

生成的sql
SELECT A.Id, A.UserName, A.Email, A.PhoneNumber, A.CreationTime, A2.Name, A2.NormalizedName, A2.IsDefault, A2.IsStatic, A2.IsPublic
FROM ("AbpUsers" A INNER JOIN "AbpUserRoles" A1 ON A.Id = A1.UserId
) INNER JOIN "AbpRoles" A2 ON A1.RoleId = A2.Id
WHERE UserNamelike @UserName+'%'
2.3.2.3 定义参数
定义参数可以根据自己的需求自行选择,一般复杂的查询都会带参数的,我们这里也定义一个通过通过姓名模糊匹配的参数

参数中的相关属性做一个解释
| 属性 | 说明 |
|---|---|
| Name | 参数名称,与SQL中定义的参数一致 |
| DataType | 参数数据类型 |
| DefaultValue | 参数默认值 |
| Expression | 表达式,一般都会从外部(代码)传递参数过来 |
| Size | 数据类型大小 |
2.3.2.4 定义列

为了效果我在报表中建立一个窗体并将控件与参数进行绑定,模拟使用代码传入参数。

3、附件
test-sql-statement.frx文件
FastReport专栏
欢迎指正,更欢迎能够一起交流,最后希望点个赞支持一下,写作不易
4、2021-04-29补充
上面这样使用TableObject第一行用作表头这样会存在一个问题(其实也不是问题)。
当数据行较多时会出现多页打印,那么第二页开始就不会有表头信息,有时候我们需要没页都携带上表头,那么怎么办呢?
4.1 第一种解决方案
while(data1.HasMoreRows)
{
if (data1.CurrentRowNo!=0 && data1.CurrentRowNo%20==0)
{
TableTest.PrintRow(0);
TableTest.PrintColumns();
}
TableTest.PrintRow(1);
TableTest.PrintColumns();
data1.Next();
}
采用动态计算页来多次打印第一行(表头)
4.2 第二种方案
将表头信息放入到栏首中去。
例如:

其实这样也只能处理简单的表头,当表中嵌入子表格的时候就不好做了
参考我提出的How to print the header after the table is paged? #272
本文介绍了如何在FastReport中操作数据源,包括新建数据源、链接和选择表或SQL查询。通过实例详细讲解了从数据源选择AbpUsers表进行报表设计,以及使用SQL查询并定义参数的方法。同时,文章提供了两种解决多页打印时表头缺失的方案。
2543

被折叠的 条评论
为什么被折叠?



