Jasper Report层级树形表格实现求助:无法设计与填充层级数据
在Jasper Report中实现层级树形结构表格的方案
一、数据源与字段配置
- 导入你的Java实体类(
ResponseOfReceiptDepositStatement和Receipt)到Jasper Studio的数据源中,确保父类的receipts字段(List<Receipt>类型)被正确识别。 - 创建子数据集:右键报表的
Datasets→Create Dataset,选择Use a datasource expression,输入表达式:
这个子数据集将专门用来遍历父类下的Receipts列表。new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{receipts})
二、树形表格布局设计
- 拖拽
Table组件到主报表的Detail Band,绑定主数据源,配置父类的展示列(比如父类的编号、汇总金额等)。 - 在需要展示子类数据的单元格中,插入
Subtable组件,绑定刚才创建的子数据集,配置Receipt的展示列(比如收据ID、明细金额等)。 - 给子表格的单元格设置左缩进(属性面板→
Padding→Left,设置15-20px),通过视觉缩进体现层级关系。
三、可选:实现折叠/展开功能
- 若需要树形的交互折叠效果,选中父类行的单元格,在属性面板的
Interactive选项中,设置Toggle Group关联子表格的分组,预览报表时点击父行即可折叠/展开子类内容。 - 也可通过参数控制全局展开/折叠:新增布尔参数
EXPAND_ALL,在子表格的Print When Expression中写入$P{EXPAND_ALL} || $V{GROUP_COUNT} == 1,通过参数值控制子类是否显示。
四、数据填充示例
构造实体类数据后,用JRBeanDataSource填充报表:
// 构造父类数据 ResponseOfReceiptDepositStatement depositStmt = new ResponseOfReceiptDepositStatement(); List<Receipt> receiptList = new ArrayList<>(); // 向receiptList添加具体的Receipt对象 depositStmt.setReceipts(receiptList); // 填充报表 JRDataSource mainDataSource = new JRBeanDataSource(depositStmt); JasperPrint jasperPrint = JasperFillManager.fillReport("你的报表路径.jasper", null, mainDataSource);
内容的提问来源于stack exchange,提问作者Hasibul Hoque
相关产品推荐
相关产品推荐

