You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jasper Report层级树形表格实现求助:无法设计与填充层级数据

在Jasper Report中实现层级树形结构表格的方案

一、数据源与字段配置

  • 导入你的Java实体类(ResponseOfReceiptDepositStatement和Receipt)到Jasper Studio的数据源中,确保父类的receipts字段(List<Receipt>类型)被正确识别。
  • 创建子数据集:右键报表的Datasets → Create Dataset,选择Use a datasource expression,输入表达式:
    new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{receipts})
    
    这个子数据集将专门用来遍历父类下的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:01:16