反馈已提交

网络繁忙

JS实现根据控件值自动匹配数据

  • 文档创建者:星踪
  • 编辑次数:7次
  • 最近更新:Leo.Tsai 于 2022-06-29
  • 1. 概述

    1.1 问题描述

    根据控件值自动匹配数据文档中介绍了2种联动方式,但是都需要在单元格失焦后才能触发联动,且一旦手动修改了联动公式所在单元格的数据,后续就无法再联动了。

    那么如果有以上两种需求的场景,该如何实现呢?

    1621395518878172.gif

    1.2 解决方案

    利用控件的编辑后事件触发联动,在事件中根据当前值获取所需数据,赋给其他单元格。接口说明可以参考API接口汇总

    注:不支持移动端。

    2. 示例

    2.1 设计模板

    新建普通报表,设计填报表格,A3 单元格添加下拉框控件,B3~F3 添加文本框控件,如下图所示:

    2.2 下拉框设置数据字典

    选中 A3 单元格,给下拉框控件绑定数据字典,如下图所示:

    2.3 添加数据集

    新建数据集ds1,从FRDemo取数,sql语句为:SELECT * FROM 产品

    2.4 设置编辑后事件

    选中A3单元格,给下拉框控件添加一个编辑后事件。

    JavaScript 代码如下:

    注:使用 FR.remoteEvaluate 接口存在一定安全风险,用户可根据实际情况使用,详情可查看:全局接口-FR

    var id=this.getValue();
    //获取当前控件值
    var cpmc=FR.remoteEvaluate("value('ds1','产品名称','产品ID','"+id+"')");
    var dwsl=FR.remoteEvaluate("value('ds1','单位数量','产品ID','"+id+"')");
    var cbj=FR.remoteEvaluate("value('ds1','成本价','产品ID','"+id+"')");
    var dj=FR.remoteEvaluate("value('ds1','单价','产品ID','"+id+"')");
    var kcl=FR.remoteEvaluate("value('ds1','库存量','产品ID','"+id+"')");
    //根据产品ID去ds1数据集中获取其他字段的值
    var row=FR.cellStr2ColumnRow(this.options.location).row;
    //获取当前行号
    _g().setCellValue(0,1,row,cpmc);
    _g().setCellValue(0,2,row,dwsl);
    _g().setCellValue(0,3,row,cbj);
    _g().setCellValue(0,4,row,dj);
    _g().setCellValue(0,5,row,kcl);
    //给当前行其他单元格赋值

    2.5 效果预览

    保存报表,填报预览效果如下图所示:

    1.gif

    3. 模板下载

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\JS\填报预览JS实例\JS实现根据控件值自动匹配数据.cpt

    点击下载模板:JS实现根据控件值自动匹配数据.cpt

    附件列表


    主题: 填报应用
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭