1.概述
1.1 问题描述
单元格里添加的 下拉树控件 ,数据字典设置了实际值和显示值,选择时显示的是显示值,在失焦后单元格中显示的会是实际值。
例如下图用下拉树展示部门结构,选项的实际值为部门 ID,显示值为部门名称,可以看到失焦后,下拉树框里面变为实际值。
那如何让其失焦后仍然显示为显示值并且可以提交入库呢?
1.2 原因分析
下拉树的返回值是一个数组,但如果返回了完整路径,则形态在转化实际值为显示值时,会将每个节点的完整路径视为一个字符串整体去匹配数据,所以就无法匹配到相应的显示值了。
1.3 解决思路
单元格「形态>数据字典」设置实际值和显示值的对应关系,这样可以实现失焦后最终显示成显示值。在填报属性中用 MAPARRAY() 和 VALUE() 函数实现对实际值的转换入库。
2. 示例
2.1 准备数据
1)新建一张普通报表,添加数据集 ds1,SQL 语句为:SELECT * FROM 公司部门
2)接着添加树数据集 tree1,选择刚才的 ds1,如下图设置:
2.2 添加下拉树
在 A1 单元格添加一个下拉树控件,数据字典构建方式选择 自动构建,实际值为部门 ID,显示值为部门名称。设置成多选和不返回完整路径。如下图所示:
2.3 单元格形态设置
选中 A1 单元格,在「单元格属性>形态」选择数据字典,绑定 ds1 数据集,实际值为「部门ID」,显示值为「部门名称」。
2.4 填报属性设置
如上设置后失焦显示的已经是显示值了,但此时提交入库绑定单元格获取的值,仍然是实际值。此处可以利用公式来处理:maparray(A1,value("ds1",3,1,item)),其中 maparray 函数用来新建数组,通过 Value函数 在新数组中列出和 A1 单元格中部门ID 一一对应的部门名称。
如果需要对结果进行拼接,以字符串的形式存储到数据库,可以在公式中加一个字符串拼接函数 JOINARRAY:JOINARRAY(maparray(A1,value('ds1',3,1,item)),',')
2.5 效果预览
PC 端预览效果如下图所示:
注:该方案也支持移动端预览。
3. 模板下载
点击下载模板:单元格下拉树返回显示值.cpt