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

编辑
文档创建者:印然 (67260 )     浏览次数:5740次     编辑次数:12次     最近更新:jiangsr 于 2018-02-01     

目录:

1. 问题描述编辑

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

2. 实现思路编辑

用文本框,点击一个按钮时,引用一个js,使其弹出一个对话框,对话框中嵌入下拉项的模板(因模板中的数据量是不受限制的),在此模板列出的所有下拉项中,选择某条记录,点击确定后,就把选择的对应值赋给文本框,且与此同时也会把对话框关闭。
效果如下:
222
下面介绍如上问题的解决方案,如上两个模板的制作:下拉选项的模板与参数界面选择的模板

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); //给文本控件的格子(A2)赋值val window.parent.FR.closeDialog(); //确定获取值后,关闭取消父窗口的对话框 window.parent.FR.destroyDialog();
将模板保存为:%FR_HOME%\WebReport\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 主模板设计
切换到参数设计界面,添加一个文本类型控件,并将控件命名为p1。
再添加一个按钮类型控件,并将按钮命名为选择记录, 添加点击事件,在function fun(){}函数中写入如下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}?reportlet=doc/Parameter/数据钻取子报表.cpt&op=write")); var o = { title : "请选择记录项", width : 460, height: 350 }; FR.showDialog(o.title, o.width, o.height, $iframe,o);
将模板保存为:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Parameter\数据钻取主报表.cpt
3.3 分页预览
选择father.cpt,点击分页预览,点击选择记录按钮,效果如上。
在线查看模板效果请点击数据钻取主报表.cpt

4. 实现步骤—填报界面编辑

上述实例是在参数界面下,如果在填报页面下,上述js有所改动,如下。
子模板中的工具栏自定义按钮的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();

附件列表


主题: 专题总结
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,请咨询帆软技术支持
关于技术问题,您还可以通过帆软论坛获取帮助,论坛上有非常多的大神,有些水平比帆软工程师还要高哦。
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

本文档是否有用?
谢谢! 我们非常感谢您的反馈。
提交反馈: