历史版本2 :单元格下拉树返回显示值 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

1. 问题描述编辑

前面几篇文档介绍了参数界面下拉树的使用方法,以及treelayer函数的使用,那么在填报页面使用下拉树控件时,如果不做任何处理,控件的返回值就会是层级路径,而不是所选层级的值,并且往数据库中填报的值也会是路径值,那么怎样设置才能使单元格显示为所选层级值,并且录入数据库也是所选层级值呢。

2. 示例编辑

在填报页面使用下拉树展现部门结构,实际值为部门ID,显示值为部门名称,希望实现下拉树所在单元格返回值为所选层级值的显示值,入库时时所选层级值的实际值。如下图所示:
2.1 数据准备
新建一张模板,添加数据集ds1:SELECT * FROM [公司部门]
接着添加树数据集tree1:,如下图:
2.2 添加下拉树
在报表主体添加一个下拉树控件,在属性设置页面去掉只返回叶子节点前面的勾选,新建一个单选下拉树,构建方式选择下拉树控件自动构建,实际值为部门ID,显示值为部门名称,设置如下图:
此时,下拉树就可以正常使用,但是控件的返回值是路径值,并且还是实际值,如下图:
那么,为了让其返回为所选层级的显示值,即返回“财务部”,就需要在形态中设置,将控件返回实际值的路径转化成所选层级的显示值,即获取到控件返回值部门ID“1,13”中的“13”,并通过sql语句,将部门ID转换为部门名称即可。
2.3 形态设置
如上所说,获取路径值的最后一个部门id的值,可用treelayer函数实现,即treelayer($$$),用sql语句转换部门ID和部门名称,则可用SQL函数,完整的公式如下:
sql("FRDemo","select 部门名称 from 公司部门 where 部门id='"+treelayer($$$)+"'",1)
如下图:
注:如果此处的下拉树是多选下拉树,那么sql函数应该为:sql("FRDemo","select 部门名称 from 公司部门 where 部门id in ('"+treelayer($$$)+"')",1)
2.4 填报属性设置
到此为止,报表展示时的数据显示已经满足需求,但是上面所做的一切设置都只是改变了数据的形态,并没有改变数据的实际值,那么在入库的时候还是会用实际值入库,比如说,选择了“财务部”,填报进数据库的值却是“1,13”,很明显,填报进数据库的值应该是“财务部”对应的部门ID“13”,所以在填报属性处也需要使用公式treelayer(B2),B2单元格为下拉树所在单元格,如下图:
2.5 结果查看
点击填报预览,选择“财务部”,web端的结果如上所示,点击提交按钮之后,查看表里面的数据,会发现填报进去的是财务部的实际值“13”。而不是“1,13”,如下图:

注:不论是单选下拉树还是多选下拉树均可这么设置。