下拉框数据量大时的解决方案

编辑
  • 文档创建者:印然
  • 浏览次数:10511次
  • 编辑次数:19次
  • 最近更新:Kevin-s 于 2019-06-20
  • 1. 描述

    在使用下拉框,若遇到下拉框中的数据量很大时,比如有上万条选项,这时浏览器加载就会很慢甚至出现死机。需说明的是:其在正常情况下,最多是 8000 条左右。倘若超过此上限时,怎么解决使之在数据量大时能够快速定位呢?

    注:在 6.5.5 之前版本才会出现如上问题,6.5.5 下拉列表中的数据是异步加载,因此不会出现加载很慢的现象。


    2. 思路

    用文本框,点击一个按钮时,引用一个js,使其弹出一个对话框,对话框中嵌入下拉项的模板(因模板中的数据量是不受限制的),在此模板列出的所有下拉项中,选择某条记录,点击确定后,就把选择的对应值赋给文本框,且与此同时也会把对话框关闭。

    效果如下:


    下面介绍如上问题的解决方案,如上两个模板的制作:下拉选项的模板与参数界面选择的模板


    3. 实现步骤—参数界面

    3.1 子模板设计

    3.1.1 方法一

    新建工作簿,添加数据集 ds1,SQL 语句:SELECT * FROM STSCORE

    将数据列 name 拖拽到 B1 单元格中并设置其控件类型为文本型,控件名称为 record,如下图:



    点击模板>模板 Web 属性>填报页面设置,添加一个自定义按钮,将按钮名称设置为确定,并添加其他按钮,给自定义按钮增加如下 JS 代码:

    var currentCell = contentPane.curLGP.currentTDCell; //当前选中的单元格
    var val = FR.getCellValue(currentCell); //拿取当前选中的单元格
    var form = window.parent.form; //拿取当前页面的父窗口(即获取参数界面的form)
    form.getWidgetByName("p1").setValue(val); //给文本控件p1赋值val
    window.parent.FR.closeDialog(); //确定获取值后,关闭取消父窗口的对话框
    window.parent.FR.destroyDialog();



    将模板保存为:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\下拉框数据量大-参数界面子报表.cpt


    3.1.2 方法二

    新建工作簿,添加数据集 ds1,SQL 语句:SELECT * FROM STSCORE

    将数据列 name 拖拽到 B1 单元格中并设置其控件类型为文本型,控件名称为 record。

    右击 B1 所在单元格,点击超级链接,弹出超级链接对话框,添加 JavaScript 事件,给参数 val 赋当前单元格的值,JS 代码如下:

    var form=window.parent.form;
    //获取当前页面的父窗口
    form.getWidgetByName("p1").setValue(val);
    //给文本控件的格子(B1)赋值val
    window.parent.FR.closeDialog();
    //确定获取值后,关闭取消父窗口的对话框
    window.parent.FR.destroyDialog();

    实际上相当于一个窗口控件,可以在窗口中设置条件查询,然后选择需要的参数。

    而且,当主模板的文本控件名规范的情况下,子模板可以用于多个主模板。


    3.2 主模板设计

    新建数据集 ds1:SELECT * FROM STSCORE 

    将所有字段拖拽到 A2-F2,按照如下样式设计模板:

    双击 A2 单元格,添加过滤条件,姓名字段用 $p1 过滤,子模板里将对话框里获取到的姓名赋值给了 $p1,如下图:


    切换到参数设计界面,添加一个文本类型控件,并将控件命名为 p1,如下图:


    再添加一个按钮类型控件,并将按钮命名为“选择记录”, 添加点击事件,写入如下 JS 语句:


    window.form = this.options.form;
    var $iframe = $("<iframe id='inp' name='inp' width='100%' height='100%' scrolling='no' frameborder='0'>");
    $iframe.attr("src", FR.cjkEncode("${servletURL}?viewlet=doc/Parameter/下拉框数据量大-参数界面子模板.cpt&op=write"));
    var o = {
    title : "请选择记录项",
    width : 460,
    height: 350
    };
    FR.showDialog(o.title, o.width, o.height, $iframe,o);

    添加一个查询按钮,如下图:

    将模板保存为:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\下拉框数据量大-参数界面主报表.cpt


    3.3 分页预览

    选择下拉框数据量大-参数界面主报表,点击分页预览,点击选择记录按钮,效果如上。

    在线查看模板效果请点击 数据钻取主报表.cpt


    4. 实现步骤—填报界面

    上述实例是在参数界面下,如果在填报页面下,上述 JS 有所改动,如下。

    4.1 模板修改

    1)子模板

    打开%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\下拉框数据量大-参数界面子报表.cpt,把子模板中的工具栏自定义按钮的 JS 事件代码修改如下:

    var currentCell = contentPane.curLGP.currentTDCell; //当前选中的单元格
    var val = FR.getCellValue(currentCell); //拿取当前选中的单元格
    var form = window.parent.contentPane; //拿取当前页面的父窗口(即获取填报界面)
    form.setCellValue(0,1,val); //给文本控件的单元格(A2)赋值val,0代表第一列,1代表第2行
    window.parent.FR.closeDialog(); //确定获取值后,关闭取消父窗口的对话框
    window.parent.FR.destroyDialog();

    2)主模板

    新建一张 cpt 模板,在 A2 单元格添加一个文本控件,B2 单元格添加一个按钮控件,按钮控件添加点击事件,JS 如下:

    window.form = this.options.form;
    var $iframe = $("<iframe id='inp' name='inp' width='100%' height='100%' scrolling='no' frameborder='0'>");
    $iframe.attr("src", FR.cjkEncode("${servletURL}?viewlet=doc/Parameter/下拉框数据量大-参数界面子模板.cpt&op=write"));
    var o = {
    title : "请选择记录项",
    width : 460,
    height: 350
    };
    FR.showDialog(o.title, o.width, o.height, $iframe,o);


    4.2 填报预览

    主报表,点击填报预览,点击按钮,效果如下图:


    附件列表


    主题: 专题总结
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]