找回密码
 立即注册

QQ登录

只需一步,快速开始

Bella.Yuan Wyn认证
超级版主   /  发表于:2022-2-14 15:20  /   查看:1615  /  回复:0
本帖最后由 Felix.Li 于 2023-7-4 14:10 编辑

大家在报表设计过程中,有时根据需求需要对某些列进行隐藏,下面就来给大家介绍一下如何动态显示行列。
image.png261639098.png
1、用户自定义表格列
1)新建数据源及数据集,新建报表,并创建表格组件,绑定数据字段,如下图示:

2)添加一个报表参数,并按下图所示编辑参数设置项。
image.png41330260.png
3)单击表格上方对应的操作块,选中表格列,然后在属性设置面板中找到“显示选项”下的“隐藏”设置项,单击右侧的小方块,然后选择“表达式”。
image.png433003844.png
4)在表达式编辑器中输入表达式: {IIF(Join(@P1, ",").IndexOf("订单编号") >= 0, false, true)}
表达式含义:先将参数P1转换成字符串,然后检测是否包含“订单编号”,如果包含则返回“False”,如果不包含则返回“Ture”。
由于表达式是添加在了“隐藏”设置项中,因此如果返回“False”也即不隐藏,返回“Ture”则隐藏。
image.png393908995.png
5)同理,为其他的表格列的“隐藏”设置项添加表达式,并将表达式中 IndexOf的参数值更换为表格列对应的字段名。
image.png344209594.png
6)预览,根据参数可以动态显示表格对应列。
2、根据用户权限动态显示表格列
1)新建数据源及数据集,新建报表,并创建表格组件,绑定数据字段,如下图示:

2)比如我们需要动态控制“产品单价”数据列,选中表格列,然后打开表格列“隐藏”属性的表达式编辑器。
image.png315598449.png
3)在表达式编辑器中输入表达式:
  1. {IIF(Join(UserContext.GetValues("role"), ",").IndexOf("administrator") >= 0, false, true)}
复制代码
      表达式含义:先获取到当前登录用户的角色值并将其转换成字符串,然后检测是否为“administrator”,如果是则返回“False”,如果不是则返回“Ture”。
      由于表达式是添加在了“隐藏”设置项中,因此如果返回“False”也即不隐藏,返回“Ture”则隐藏。
image.png840478515.png
4)预览报表。当前登录用户为administrator,因此可以看到“产品单价”列;如将文档分享给其他角色并切换至其他角色的用户登录,则不能看到。
image.png71784361.png    image.png218284300.png


下面附上我的demo,欢迎大家一起交流哦!   

demo.zip

390.42 KB, 下载次数: 28

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部