6.8 子报表设计方案
子报表是内含于报表中的报表,在这类报表中,主报表与子报表相互联系,而子报表仅显示与主报表有关的记录。本节将详细介绍如何设计子报表。
6.8.1 未链接子报表
未链接的子报表是最直接了当的子报表。未链接的子报表尽管出现在主报表中,但被认为是一个完全独立的报表,因为它与主报表之间一点关系都没有。这种子报表有自已的布局、数据链接和选择标准。它一点也不受主报表中内容的影响。
1.方案分析
在设计报表时,有时需要引用某份报表中的内容作为设计的报表使用。为了避免花时间重新设计,最直接的且方便的办法就是将该报表当成一个子报表来内嵌入到现设计的报表中,比方说,某份报表内的数据、图片、交叉表或图表刚好是现设计报表所需要的,则可以将该报表直接内嵌入到现设计的报表中。由于只是单纯将另外一个报表的信息显示于自已的报表中,两者不存在任何的关系链接,所以此种子报表叫未链接子报表。
2.实施过程
实例位置:光盘\ mr\06\6.8\6.8.1\01
本实例实现将“CrystalReport2.rpt”部门员工工资交叉分析报表作为子报表插入到主报表员工信息报表中,效果如图6.153所示。

图6.153 未链接子报表
未链接子报表方案的实施步骤如下:
(1)设计部门员工工资交叉分析报表“CrystalReport2.rpt”,如图6.154所示。

图6.154 交叉表设计
(2)“CrystalReport.rpt”报表中插入子报表,使用鼠标右键单击“报表页眉”节中的空白处,在弹出的快捷菜单中选择“插入/子报表”命令,此时鼠标光标会拖曳一个灰色方框,在“报表页眉”单击鼠标,弹出“插入子报表”对话框。
(3)选择“在项目中选择Crysta Report”单选按钮,并从“报表名”列表中选取“CrystalReport2.rpt”子报表,如图6.155所示。

图6.155 “插入子报表”对话框。
(4)单击【确定】按钮,返回主报表设计器,设计报表,如图6.156所示。

图6.156 主报表设计
3.补充说明
子报表就是一些水晶报表,同样,在Crystal Reports设计器中它们有自已的设计页面。为了格式化子报表的详细资料,有必要在主报表设计器中打开该子报表的设计页面。在主报表使用鼠标右键单击子报表,在弹出的快捷菜单中选择“编辑子报表”选项,切换至子报表开始编辑子报表。
6.8.2 链接子报表
链接子报表受主报表控制。子报表将依附主报表,根据主报表控制字段仅返回一个确定的记录集。
1.方案分析
如果想在主报表中包含来自多个数据表,但相互关联的多条数据记录时,使用链接子报表就显得非常方便。例如,首先在报表中显示一位学生的基本信息数据,紧接着显示该位同学的学习成绩相关信息。
2.实施过程
实例位置:光盘\ mr\06\6.8\6.8.2\01
本实例实现,将“CrystalReport.rpt”入学成绩与期中期末考试成绩子报表添加至“CrystalReport2.rpt”学生信息主报表中。效果如图6.157所示。

图6.157 链接子报表效果
链接子报表方案的实施步骤如下:
(1)创建“CrystalReport.rpt”入学成绩与期中期末考试成绩子报表。将“tb_Expale”数据表作为子报表数据源,在子报表中,自行创建了一个公式字段{@总分}来计算每一次考试的总分,并设计子报表。如图6.158所示。

图6.158 子报表设计
(2)创建“CrystalReport2.rpt”学生信息主报表。将“tb_studentInfo”数据表作为主报表数据源,并设计主报表。如图6.159所示。

图6.159 主报表设计
(3)将子报表添加到主报表的“详细资料”节中。使用鼠标右键单击“详细资料”节中的空白处,在弹出的快捷菜单中选择“插入/子报表”命令,此时鼠标光标会拖曳一个灰色方框,在“详细资料”单击鼠标,弹出“插入子报表”对话框。
(4)在弹出的对话框中,选择“在项目中选择CrystalReport”单选按钮,并从“报表名”列表中选取“CrystalReport.rpt”子报表,如图6.160所示。

图6.160 选择子报表
(5)选择“链接”选项卡,从“可用字段”列表中将“tb_studentInfot.学号”移至右侧的“字段链接到”列表中,勾选“基于字段选择报表中的数据”复选框,并且从其下拉列表中选择“学号”,如图6.161所示。

图6.161 链接子报表
(6)单击【确定】按钮,返回报表设计器,如图6.162所示,子报表已添加到主报表中。

图6.162 子报表添加成功
注意:可以将子报表添加至任何节中。
3.补充说明
实例位置:光盘\ mr\06\6.8\6.8.2\02
为了提高报表效率,有时子报表不需要立即显示于主报表中,而是以超链接的形式让用户点选以便动态打开子报表。这时需要创建“依需显示子报表”,将本实例修改为“依需显示子报表”,在主报表中单击“学生成绩”超链接,就会显示学生的相应成绩信息,如图6.163和图6.164所示。

图6.163 主报表

图6.164 子报表
以超链接形式显示子报表方案的实施步骤如下:
(1)将主报表打开,使用鼠标右键单击“详细资料”节中的空白处,在弹出的快捷菜单中选择“插入/子报表”命令,此时鼠标光标会拖曳一个灰色方框,在“详细资料”单击鼠标,弹出“插入子报表”对话框。
(2)在弹出的对话框中,选择“在项目中选择Crysta Report”单选按钮,并从“报表名”列表中选取“CrystalReport.rpt”子报表,同时勾选“按需显示子报表”复选框。如图6.165所示。

图6.165 选择子报表
(3)选择“链接”选项卡,从“可用字段”列表中将“tb_studentInfot.学号”移至右侧的“字段链接到”列表中,勾选“基于字段选择报表中的数据”复选框,并且从其下拉列表中选择“学号”如图6.166所示。

图6.166 链接子报表
(4)单击【确定】按钮,返回报表设计器,如图6.167所示。子报表已添加到主报表中。

图6.167 子报表添加成功
(5)使用鼠标右键单击子报表,在弹出的快捷菜单中选择“设置对象格式”选项,弹出“格式化编器辑”对话框,单击“子报表”选项,在“子报表名称”文本框中输入“学生成绩”。如图6.168所示。

图6.168 设置报表标题
(5)单击【确定】按钮,返回报表设计器如图6.169所示。

图6.169 主报表设计






