润乾报表动态显示或者增加列的三种实现方式

本文介绍了润乾报表V4中实现动态显示或增加列的三种方法,包括利用隐藏功能、动态列设置及报表设计技巧,帮助用户灵活调整报表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发报表期间,有时会遇到这样的需求,在列表类的报表中想动态的显示某些字段。

本文就来讨论一下如何实现上面的需求,大致可以分为两种方法,一是在设计报表时把所有的列都设置好,用隐藏列属性控制列的显示或者隐藏,二是用API的方式动态的增加列,用来显示需要显示的字段。

下面分别说一下两种方式的实现方法

一.可以使用润乾的datasetName.field( stringExp )及datasetName.fieldName( intExp )实现动态列报表

1、 使用eval(),通过动态解析并计算表达式,实现列的扩展;
2、 使用ds.colCount(),获得数据集的列数;
3、 使用ds.fieldName(),根据列号取数据集的列名。
使用这三个函数就能实现客户的需求了,具体做法如下:
我们使用demo中的“订单”这张表为例,SQL语法为:SELECT * FROM 订单,表中的单元格写法如图:
 
最终调整单元格大小后,预览如下图:
 

 二.在设计报表模板时,把所有的字段都设置好,用隐藏列属性根据条件控制列的显示或者隐藏。

如下报表


报表中含有10列,显示了10个字段,前4列是常规列,后6列是活动列。设置一个参数showColID,参数类型为字符串组,此参数用来接收需要显示列的列号,在隐藏列属性里写表达式“if(str(col()) in (@showColID),false,true)”。这个表达式只设置在5,6,7,8,9,10列的第一行中单元格的隐藏列属性就可以了,不用给每一列的所有单元格设置,那样会影响效率。

参数showColID的值为“6,8,9”,显示效果如下


此方法的优点:只在报表中设置,不用写程序就可以实现,实现方法比较简单容易。数据量大时可以启用缓存。

缺点:活动列中的字段默认情况下在数据集中要全部查询出来。只适用于上图中网格式报表,如果报表中含有卡片式表头,或者是行式报表,用上面方法就不能实现了。

二.API方法

如果是行式报表,上面的方法就不能实现,因为行式报表不支持隐藏列;或者是含有卡片式表头的普通报表,用上面的方法也不能实现,隐藏行后表头的内容有可能也被隐藏了。

如下面报表


实现原理:

先说一下含有卡片式表头的普通报表如何动态显示某些列呢?卡片式表头做在一个子表里,用嵌入式方式引用子报表,用API提供的方法增加列,用来显示需要显示的字段,这样数据区的宽度会增加,而卡片式表头区的宽度并没有增加,把数据区增加的宽度平均分配给卡片式表头区的每一列,这样就可以保持表头区和数据区宽度相同。

实现方法:

首先设计一个报表模板,只设计常规列就可以。


动态显示的列名、字段名、字段类型通过json方式传递给jsp,如下"{\"colAddField\" : [{\"dataSetName\" : \"ds1\",\"dataType\" : str,\"colAndField\" : \"货主邮政编码,货主邮政编码\"}, {\"dataSetName\" : \"ds1\",\"dataType\

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值