1. 概述编辑
1.1 预期效果
下拉树选择参数时,希望默认全选,下拉树中显示“选中”状态,且默认值返回完整的节点路径。效果如下图所示:
1.2 实现思路
通过属性>控件值,默认勾选全部下拉参数。
2.示例编辑
2.1 准备数据
数据集 ds1,查询出所有地区,SQL 语句为:SELECT 货主地区 FROM 订单 where 货主地区!=""
数据集 ds2,根据第一层 layer1 的值查询出省份,SQL 语句为:SELECT 货主省份 FROM 订单 where 货主省份!="" and 货主地区='${layer1}'
数据集 ds3,根据前两层 layer1、layer2 的值查询出城市,SQL 语句为:SELECT 货主城市 FROM 订单 where 货主城市!="" and 货主地区 = '${layer1}'and 货主省份='${layer2}'
注:这里是通过 layer1、layer2 来引用,以此类推。其中 layer1,layer2 等均是预定义好的,不可更改。
2.2 设计报表
1)参数面板拖入下拉树控件
2)选择属性表>高级>数据字典,构建方式选择普通分层构建,选择每层对应的数据集。
层次1:
层次2:
层次3:
3)设置属性>高级>多选,高级>结果返回叶子节点,高级>结果返回完整层次路径。
4)属性表>高级>控件值,选择公式,弹出公式定义对话框,输入公式,如下图所示:EVAL("["+JOINARRAY(sql("FRDemo", "select '['||''''||货主地区||''''||','||''''||货主省份||''''||','||''''||货主城市||''''||']' from 订单", 1), ",")+"]")
下拉树默认值设置,要求默认值必须填写节点的完整路径,详细内容可以参考:下拉树默认值设置 ,所以下拉树默认全选,就要在下拉树控件值处以一定格式填写下拉树所有节点的完整路径。
举例:如两个子节点北京、济南,就要将节点路径写成字符串 [['华北','北京','北京'],['华东','山东','济南']],最后通过 EVAL 函数让下拉树呈现出选中节点的状态。
公式解释
以下用 * 代替 sql("FRDemo", "select '['||''''||货主地区||''''||','||''''||货主省份||''''||','||''''||货主城市||''''||']' from 订单", 1) 。
步骤 | 作用 | 公式说明 |
---|---|---|
* | 取出 FRDemo 中订单表的货主地区、货主省份、货主城市字段,将这三个字段拼接成节点完整路径,返回值为数组,每一个节点的完整路径对应该数组的一个元素。 | SQL(CName,sql,col,row)返回通过 sql 语句从 CName 数据连接中获得的数据表的第col列第row行 |
"["+JOINARRAY(*, ",")+"]" | 将拼接得到的节点路径数组转换成字符串,再在字符串两端拼接[ ]得到一个包含所有节点路径的表达式字符串。 | JOINARRAY(array,sepa):返回一个由 sepa 作为分隔符的字符串 |
EVAL("["+JOINARRAY(*, ",")+"]") | 作用下拉树控件,呈现下拉树选中默认值的效果。 | EVAL(exp)返回表达式exp计算后的结果。exp:一个表达式形式字符串 |
注:* 式中 || 为字符串拼接运算符,不同类型的数据库中字符串拼接运算符不同,所以实际应用中请根据使用的数据库类型修改拼接运算符。
另外默认值全选也可以参考 下拉树默认值设置 ,将默认值格式设置成 总部,财务部,部长;总部,财务部,会计 的格式存储在字段中,控件值处选择以「字段」的形式呈现。
2.3 效果预览
保存模板,点击分页预览,效果如下图所示:
注:该方法不支持移动端。
3. 模板下载编辑
已完成模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\下拉树控件默认全选.cpt
点击下载模板:下拉树控件默认全选.cpt