1. 概述
1.1 预期效果
当参数面板中有多个控件时,希望后一个控件的选项根据前一个控件选择的值变化,尤其使用在控件选项之间有层级关系的场景中。如下图所示,省份选项需跟随地区所选值而变动,城市选项需跟随地区、省份所选值相应变动。
1.2 实现思路
这种场景主要针对的是有选项的控件,如下拉框、下拉复选框、单选按钮、复选按钮等。我们知道这类控件的选项是通过绑定 数据字典 实现的,所以想要实现选项联动,就要修改数据字典,设置一个动态的数据字典。
数据字典的类型有四种,数据库表和自定义都是固定的,没有办法设置动态,所以要设置一个动态数据字典,就只能通过数据查询或者公式实现。
数据查询:数据字典绑定一个数据查询,数据查询中查询的数据受前一个控件所选值的影响。
公式:数据字典绑定一个公式,根据前一个控件的参数值,从数据集中过滤数据或者从表中过滤数据。
2. 实现方法
2.1 数据查询实现
控件的数据字典绑定一个带有数据集参数的数据查询,如果你的控件绑定的数据是从数据库查询获得,推荐使用此方法。
2.1.1 设计查询报表
首先要实现一个 控件筛选查询,可以选择通过数据集参数的方法实现,也可以选择通过模板参数的方法实现。这里因为数据字典绑定时也会定义数据集参数,所以选择数据集参数的方法实现。
1)首先定义一个数据集用来制作报表时查询数据:SELECT * FROM 订单 where 货主地区='${area}' and 货主省份='${province}' and 货主城市='${city}',其中定义了三个参数 area、province、city。
2)将 ds1 数据集的数据列拖到报表中,设计报表样式,如下图所示:
2.1.2 设计过滤控件
2.1.1 节中已经定义好了数据集参数,如果要实现查询就必须绑定控件。点击参数面板,在参数面板「组件设置」处可以看到定义好的三个参数,点击将其添加在参数面板中,将其类型选择为「下拉框」控件。如下图所示:
现在要绑定三个下拉框的数据字典,设置控件的选项可以联动。
1)地区控件 area 的选项不受任何控件的影响,直接绑定即可,可以选择绑定数据表,也可以绑定数据查询。这里新建一个数据查询 ds2:SELECT * FROM 订单
控件数据集绑定数据查询 ds2 的货主地区字段。
2)省份控件 province 的选项要受地区控件 area 影响,逻辑为 province 控件的选项必须是 area 地区下的。所以新建一个数据查询 ds3:SELECT * FROM 订单 WHERE 货主地区='${area}',控件数据集绑定数据查询 ds3 的货主省份字段。
这样当 area 选择不同值后,ds3 的值也会随着变化,查询出的城市都是 area 地区下的省份。如下图所示:
3)城市控件 city 的选项要受地区控件 area 和省份控件 province 的影响,逻辑为 city 控件的选项必须是 area 地区province 省份下的,所以新建一个数据查询 ds4:SELECT * FROM 订单 WHERE 货主地区='${area}' and 货主省份='${province}'。控件数据集绑定数据查询 ds4 的货主城市字段。
这样当 area 和 province 选择不同值后,ds4 的值也会随着变化,查询出的城市都是 area 地区 province 省份下的城市。如下图所示:
2.1.3 效果预览
修改下「标签控件」的名称,将 area 修改为地区、province 修改为省份、 city 修改为城市。如下图所示:
保存模板,点击预览,地区控件选择华中,省份控件中的选项就只有华中地区的省份;省份控件选择湖北,城市控件的选项就只能是湖北的城市,城市控件选择武汉后点击查询就只查询出武汉的数据。如下图所示:
2.2 公式实现
公式实现,即在绑定数据字典时选择公式。不能通过数据查询实现时可以选择公式实现,尤其绑定的数据来源于内置数据集或者文件数据集时。
2.2.1 设计查询报表
首先要实现一个 控件筛选查询,可以选择通过数据集参数的方法实现,也可以选择通过模板参数的方法实现。这里选择数据集参数的方法实现。
1)首先定义一个数据集用来制作报表时查询数据:SELECT * FROM 订单 where 货主地区='${area}' and 货主省份='${province}' and 货主城市='${city}',其中定义了三个参数 area、province、city。
2)将 ds1 数据集的数据列拖到报表中,设计报表样式,如下图所示:
2.2.2 设计过滤控件
2.2.1 节中已经定义好了数据集参数,如果要实现查询就必须绑定一个控件。点击参数面板,在参数面板「组件设置」处可以看到定义好的三个参数,点击将其添加在参数面板中,将其类型选择为「下拉框」控件。如下图所示:
现在要绑定三个下拉框的数据字典,设置控件的选项可以联动。新建一个数据查询ds2:SELECT * FROM 订单,用来绑定控件的数据字典。
1)地区控件 area 的选项不受任何控件影响,直接绑定订单表的地区列,或者 ds2 数据查询的地区列:
通过 SQL函数 直接取数据库数据:sql("FRDemo","select distinct 货主地区 from 订单",1)
通过 数据集函数 tablename.select 取数据集中的数据:ds2.select(货主地区)
如下图所示:
2)省份控件 province 的选项要受地区控件 area 影响,逻辑为 province 控件的选项必须是 area 地区下的,可以通过公式结合参数实现。实际值处输入公式:ds2.select(货主省份,货主地区=$area),取数据集中货主地区=参数 area 的货主省份。如
下图所示:
3)城市控件 city 的选项要受地区控件 area 和省份控件 province 的影响,逻辑为 city 控件的选项必须是 area 地区province 省份下的。实际值处输入公式:ds2.select(货主城市,货主地区=$area&&货主省份=$province),取数据集中货主地区=参数 area 且货主省份=参数 province 的货主城市。如下图所示:
2.1.3 效果预览
修改下「标签控件」的名称,将 area 修改为地区、province 修改为省份、 city 修改为城市。如下图所示:
保存模板,点击预览,地区控件选择华中,省份控件中的选项就只有华中地区的省份。省份控件选择湖北,城市控件的选项就只能是湖北的城市,城市控件选择武汉后点击查询就只查询出武汉的数据。如下图所示: