Jaspersoft-Studio-Master-Child-Table-1

Jaspersoft Studio Subreport 控件实现主子表

官网参考:https://community.jaspersoft.com/wiki/subreports-jaspersoft-studio
报表案例下载:下载

1.表及数据环境

学生表

CREATE TABLE Student(
SID NUMBER,
NAME VARCHAR(20)
);

教师表

CREATE  TABLE Teacher(
TID NUMBER,
NAME VARCHAR(20)
);

课程信息表

CREATE  TABLE CourseList(
CID NUMBER,
TID NUMBER,
NAME VARCHAR(20)
);

学科成绩表

CREATE  TABLE CourseScore(
SID NUMBER,
CID NUMBER,
SCORE NUMBER
);

模拟数据插入

-- Student 表
INSERT INTO STUDENT ("SID", "NAME") VALUES ('1', '张三');
INSERT INTO STUDENT ("SID", "NAME") VALUES ('2', '李四');
-- Teacher 表
INSERT INTO TEACHER ("TID", "NAME") VALUES ('1', '老王');
INSERT INTO TEACHER ("TID", "NAME") VALUES ('2', '老李');
INSERT INTO TEACHER ("TID", "NAME") VALUES ('3', '老张');
-- CourseList 表
INSERT INTO CourseList ("CID", "TID", "NAME") VALUES ('1', '1', '语文');
INSERT INTO CourseList ("CID", "TID", "NAME") VALUES ('2', '2', '英语');
INSERT INTO CourseList ("CID", "TID", "NAME") VALUES ('3', '3', '数学');
-- CourseScore 表
INSERT INTO CourseScore ("SID", "CID", "SCORE") VALUES ('1', '1', '50');
INSERT INTO CourseScore ("SID", "CID", "SCORE") VALUES ('1', '2', '60');
INSERT INTO CourseScore ("SID", "CID", "SCORE") VALUES ('1', '3', '80');
INSERT INTO CourseScore ("SID", "CID", "SCORE") VALUES ('2', '1', '90');
INSERT INTO CourseScore ("SID", "CID", "SCORE") VALUES ('2', '2', '88');
INSERT INTO CourseScore ("SID", "CID", "SCORE") VALUES ('2', '3', '86');

2.创建主报表文件 Main.jrxml

数据源如下:

SELECT SID "学号", Name "学生名称" FROM Student



3.主报表 主页面控件拖拽如下

4.创建子报表文件 Sub.jrxml

数据源配置如下:

SELECT  cl.Name "课程名",t.Name "任课老师名", cs.SCORE "成绩" 
FROM  CourseScore  cs LEFT JOIN  Student s ON s.SID = cs.SID LEFT JOIN CourseList cl ON cs.CID = cl.CID 
LEFT JOIN Teacher t ON t.TID = cl.TID
WHERE s.SID = $P{学号} 

并配置子报表的参数:

5.子报表 主页面控件拖拽如下

6.在主报表(Main.jrxml)中 添加 Subreport 控件

选择对应工作目录的子报表,我这边为 Sub.jrxml 文件

我这边为同一个数据库连接

这边配置 主报表 给 子报表 传递的参数,$F{学号} 是 主报表中查询出的结果,传给 子报表中 $P{学号} 参数

7.主报表(Main.jrxml)最终拖拽结果

8.执行结果

9.各方面注意事项

1、子报表一般为了好看需要将 子报表的 Page Format 中 Margins 都改为 0
2、子报表中的查询语句要使用 $P  ,而不是 $F 为字段(Field),$P 为参数(Parameter)
3、在拖拽控件时主报表要考虑子报表的对应高度
Contents
  1. 1. Jaspersoft Studio Subreport 控件实现主子表
    1. 1.1. 1.表及数据环境
    2. 1.2. 2.创建主报表文件 Main.jrxml
    3. 1.3. 3.主报表 主页面控件拖拽如下
    4. 1.4. 4.创建子报表文件 Sub.jrxml
    5. 1.5. 5.子报表 主页面控件拖拽如下
    6. 1.6. 6.在主报表(Main.jrxml)中 添加 Subreport 控件
    7. 1.7. 7.主报表(Main.jrxml)最终拖拽结果
    8. 1.8. 8.执行结果
    9. 1.9. 9.各方面注意事项
|