RDL(C) Report Design Step by Step 2: SubReport

前两天,有网友在Blog上评论要求将子报表的配置贴出来,由于这两天有些别的事情,所以耽搁了;另外,自己也比较懒,有些东西明明应该早就写出来的。呵呵,说声“对不起”,然后还有“谢谢你”!

OK,这篇随笔就讲一下RDLC报表中子报表SubReport的实现步骤。

首先来看一下,本文的示例的运行结果。


图1 主子报表示例运行结果

主子报表的数据源显然也应该是两个具有主子关系的数据表,本文示例依然使用Northwind数据库的订单和订单明细表作为数据源。

1、在Visual Studio 2005中创建一个Windows应用程序RDLCSR。

2、在项目中添加数据源,数据源并不一定用来为报表提供数据(当然Visual Studio 2005提供的操作非常方便),主要是在报表设计时可以方便向报表中进行字段拖曳。添加数据源意味着在项目中添加了一个数据集Orders.xsd文件,当报表的数据不是来源于关系型数据库(如Flat Files或Web Services等)时,我们可以自己定义一个xsd文件作为报表设计时的数据源,而在程序中重新为报表载入数据。

3、在项目中添加报表rptOrder.rdlc和rptOrderDetail.rdlc分别作为示例的主报表和子报表。

4、为子报表rptOrderDetail.rdlc添加参数pOrderId,指定其数据类型为Integer,然后如图2进行子报表的布局设计。


图2 子报表rptOrderDetail.rdlc布局设计

5、为主报表rptOrder.rdlc进行如图3所示的布局设计。


图3 主报表rptOrder.rdlc布局设计

6、在主报表rptOrder.rdlc的子报表控件上单击右键,使用“属性”菜单调出“子报表属性”对话框。在“常规”选项卡中的子报表下拉列表中选择rptOrderDetail;切换到“参数”选项卡,在“参数名称”列中,系统会自动检测到步骤4中定义的子报表的参数pOrderId,并在“参数值”列中指定参数值为=Fields!订单ID.Value。

7、在子报表rptOrderDetail.rdlc中选择表格控件,使用右键菜单“属性”调出“表属性”对话框,在“筛选器”选项卡中进行入图4的设置。这主要是为了在订单明细中筛选当前订单的明细数据,当然这一步骤可以在程序中用代码指定。


图4 在子报表rptOrderDetail.rdlc中指定筛选器

好了,至此报表布局的设置已经完成了,下面需要在应用程序中显示报表并给主子报表分别提供数据。

8、在窗体frmMain中添加ReportViewer控件rptMain,并在rptMain的“ReportViewer任务”中选择报表rptOrder.rdlc。

9、在窗体frmMain中添加图5所示的代码:


图5 窗体frmMain的代码

可见,必须对ReportViewer控件的LocalReport对象添加SubReportProcessing事件,而该事件主要也就是为了子报表提供数据。

现在就可以运行应用程序查看结果了,如图6所示。


图6 示例运行结果(未给列表指定分组)

在图6中,我们看到出现两个订单显示在同一页面,而在实际应用中,我们可能希望,每个页面

上只显示一条订单。此时,可以进行以下的设置:

10、在主报表rptOrder.rdlc中,选择列表控件,右键“属性”弹出“列表属性”对话框,在“常规”选项卡中,单击按钮“编辑详细信息组”弹出“分组和排序属性对话框”并进行如图7所示的设置。


图7 为列表指定分组并设置分页显示选项

事实上,主子报表和钻取报表有着相似的地方,所以如果看了这篇随笔有什么不明白的地方,可以参看一下我的另一篇随笔RDLC Report Step by Step 1: DrillThrough Report。

Demo下载

RDL(C) Report Design Step by Step 2: SubReport相关推荐

  1. RDL(C) Report Design Step by Step 3: Mail Label

    RDL(C) Report Design Step by Step 3: Mail Label Crystal Report在报表向导中提供了三种向导类型给用户进行选择--Standard.Cross ...

  2. RDL(C) Report Design Step by Step 1: DrillThrough Report

    RDL(C) Report Design Step by Step 1: DrillThrough Report 前一段时间,发了几篇关于RDLC报表的随笔,由于这些随笔中没有关于报表设计方面的内容, ...

  3. RDL(C) Report Design Step by Step

    RDL(C) Report Design Step by Step 1: DrillThrough Report 前一段时间,发了几篇关于RDLC报表的随笔,由于这些随笔中没有关于报表设计方面的内容, ...

  4. (转 蜡人张)RDL(C) Report Design Step by Step 1: DrillThrough Report

    前一段时间,发了几篇关于RDLC报表的随笔,由于这些随笔中没有关于报表设计方面的内容,于是不少网友和我联系,问了一些关于报表设计方面的问题,最近准备写几篇关于RDLC报表设计的随笔. 这篇随笔主要描述 ...

  5. Design POX controller step by step

    Design POX controller step by step In this article, I'll describe how to understand the POX controll ...

  6. 数据库设计Step by Step (10)——范式化

    引言:前文(数据库设计Step by Step (9)--ER-to-SQL转化)讨论了如何把ER图转化为关系表结构.本文将介绍数据库范式并讨论如何范式化候选表.我们先来看一下此刻处在数据库生命周期中 ...

  7. 数据库设计Step by Step (9)——ER-to-SQL转化

    2019独角兽企业重金招聘Python工程师标准>>> 引言:前文(数据库设计 Step by Step (8)--视图集成)讨论了如何把局部ER图集成为全局ER图.有了全局ER图后 ...

  8. 【Step By Step】将Dotnet Core部署到Docker下

    一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...

  9. python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...

最新文章

  1. pandas set_index 与 reset_index
  2. python爬虫正则表达式实例-3.Python爬虫入门_正则表达式(简单例子)
  3. 1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  4. vnc--centos 7 安装和配置
  5. 2016 大数据版图
  6. 【SPOJ-QTREE】树链剖分
  7. Tomcat安装及Eclipse配置教程
  8. 完美仿MSN右下角弹出广告代码并可自动消失,附带关闭按钮
  9. mybatisplus 使用案例
  10. luogu_4551【题解】最长异或路径 trie树
  11. 腾讯云IM-SDK集成(web端)完成IM登录
  12. hdu 5294 Tricks Device 最短路建图+最小割
  13. 4.widows对象
  14. 基于STM32设计的实时心率检测仪
  15. Vue+高德地图API的使用(点击地图搜索周边信息)
  16. iPhone突然掉电快是什么情况,该如何解决?
  17. 机动车c1科三考试语言灯光,史上最全科目三灯光模拟图解
  18. 新疆几十公里花海开始盛放,一株580年最老野树,开出最艳鲜花
  19. 账户信息不存在的问题
  20. 严重的编程错误或致文件删除、黑客使用新恶意软件逃避检测|1月26日全球网络安全热点

热门文章

  1. Make NTFS writable on macOS
  2. Redis 高可用性实践
  3. Hive+LDAP+Sentry
  4. Netty ChannelOption 解释
  5. MapReduce编程实践之自定义数据类型
  6. PowerTip of the Day-Finding Invalid Aliases
  7. 2020年12月最新OneDrive网盘免费领取5TB教程
  8. 容器编排技术 -- Kubernetes 为 Namespace 配置CPU和内存配额
  9. HTML常用meta大全
  10. 简易 责任链的两种实现方式