在填报报表开发中,经常需要实现级联选择效果:根据前一个控件的值,动态展示下一个控件的可选项。
实现原理
核心逻辑是通过定义数据集,并在查询语句中增加 WHERE 过滤条件来实现。若联动数据来源于已有数据集,可直接复用该数据集进行配置。在填报界面中,可以通过单元格坐标(如 C9)或控件名称来引用当前值。
实战示例
准备环境
首先定位到默认模板路径:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\FreeForm\FreeForm.cpt。
配置级联下拉框
方案一:自定义数据集
新建数据集 ds2,SQL 编写为:
SELECT 城市 FROM 雇员 where 地区='${C9}'
这里利用 WHERE 子句限制城市数据仅显示 C9 单元格选中后的对应值。接着配置城市下拉框控件,将数据字典类型设为'数据查询',选择 ds2,实际值和显示值均选'城市'。
注意:除了单元格引用,也可以直接用控件名。例如 C9 对应的控件名为'地区',SQL 可改为
WHERE 地区='${地区}'。不过需注意,自 APP v9.3.27 版本起,移动端仅支持单元格作为参数名,不支持控件名。

方案二:SQL() 函数
将数据字典类型改为'公式',实际值输入公式:
SQL("FRDemo","select 城市 from 雇员 where 地区='"+C9+"'",1)
显示值输入公式:$$$。

方案三:ds1.select() 函数
同样将类型设为'公式',实际值输入:
ds1.select(城市,地区=C9)
显示值输入:$$$。



