FastReport使用数据源

本文介绍了如何在FastReport中操作数据源,包括新建数据源、链接和选择表或SQL查询。通过实例详细讲解了从数据源选择AbpUsers表进行报表设计,以及使用SQL查询并定义参数的方法。同时,文章提供了两种解决多页打印时表头缺失的方案。
部署运行你感兴趣的模型镜像

1、序言

现有的产品上都是使用的传入DataSetList数据源,而我接触的时候就思考了一个问题,其实这样对报表或者单据带来了耦合性,面对客户需求的时候显得不够灵活,都需要改源代码来处理。

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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值