如何实现报表的树形折叠展示功能开发原创
6人赞赏了该文章
3,732次浏览
未经作者许可,禁止转载编辑于2022年04月15日 11:19:37
关键词:
页面开发,报表,树形报表
一、需求
报表在展示时,有些数据之间存在上下级关系,可以通过树形折叠展示的功能体现出来,方便用户清晰直观的查看,如图1。
图 1
二、思路与方案
通过重写setTreeReportList()方法设置该报表为树形报表,在原本的数据里面加入 pid(当前行的父行id) 、 rowid(当前数据行id)、 isgroupnode(当前行是否有下级),用于构造树形报表数据。
三、实现过程
1.页面开发
新建【树形报表示例】继承自报表模板,报表列表字段添加文本字段[父节点](pid)、整数字段[是否叶子节点](isgroupnode)、文本字段[行ID](rowid),如图2。
图 2
2. 报表表单插件重写setTreeReportList方法,设置该报表为树形报表。
实现代码:
public class TreeReportDemoPlugin extends AbstractReportFormPlugin { public void setTreeReportList(TreeReportListEvent event) { super.setTreeReportList(event); event.setTreeReportList(true); } }
3. 报表取数插件在原本的数据里面加入pid(上级节点id)、rowid(节点id)、 isgroupnode(是否叶子节点)。
实现代码:
@Override public DataSet query(ReportQueryParam queryParam, Object obj) throws Throwable { ORM orm = ORM.create(); String selectedField = "number, name, parent as pid, isleaf, id as rowid"; //获取树形基础资料原始数据 DataSet ds = orm.queryDataSet(getClass().getName(), "kded_treebasedata", selectedField, queryParam.getFilter().getHeadFilters().toArray(new QFilter[0]), null); //添加一个布尔型字段,用于处理“是否叶子节点”字段 RowMeta newRowMeta = LogOperactionListutils.rowMetaAddField(ds.getRowMeta(), "isgroupnode", DataType.BooleanType); List<Object[]> seqRows = new ArrayList<>(); //把“是否叶子节点”字段值赋到新添加的布尔字段 for (Row row : ds) { Row perRow = RowUtil.persist(row); Object[] newRows = rowAddField(perRow, !row.getBoolean("isleaf")); seqRows.add(newRows); } return Algo.create(getClass().getName()).createDataSet(seqRows.iterator(), newRowMeta); } private Object[] rowAddField(Row row, Object fieldValue) { // 构建Row Object[] rowValues = RowUtil.toArray(row); int len = rowValues.length; Object[] newValues = new Object[len + 1]; System.arraycopy(rowValues, 0, newValues, 0, len); newValues[len] = fieldValue; return newValues; }
4. 注册报表表单插件(见图3)和报表取数插件(见图4)。
图 3
图 4
四、效果图
1. 树形基础资料原始数据,如图5。
图 5
2. 树形报表展示效果,如图6。
图 6
五、开发环境版本
COSMICV4.0.014.0
六、参考资料
七、附件
treereport.rar(1.30KB)
kded_treerptdemo.zip(4.01KB)
赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读