在报表的使用过程中,使用者在控件中输入数据后,点击其他按钮用来获取控件值进行传参、钻取或者运算时,经常不能马上获取道对应的值,需要点击两次才能获取到控件值,或者需要在点击按钮前,先点一下其他位置以移开光标,此时才能获取到控件值,这是因为报表不能及时识别到当前控件中已编辑结束,导致报表不能马上刷新控件值。如下图:
在解决上述问题时,我也有搜索过相关的案例,然而并不能解决我的问题,网上大部分都是通过按钮控件设置javascript事件,在点击按钮时,先将光标移出,再进行数据获取,而这个会占用了按钮的一个事件,大部分情况下,我们是需要再次添加多一个javascript事件的,而这会导致使用者点击按钮时出现两个事件选择,还要依次操作,体验感不够圆滑。同时,这种做法不能自定义UI界面,不能改变报表的全局参数进行直接的数据查询。
我在多次尝试之后,发现还可以通过其他方式解决这一问题,可以做到实时刷新控件值,进行页面数据过滤查询。
1、报表界面设计:
其中,“确定”按钮都是使用了动态参数,获取前面控件的数据,传入数据集并触发数据集再次查询,实时过滤数据,不再依赖参数面板的参数,可以由开发人员自定义整个报表界面。
2、javascript事件编辑:
优化前部分正常部署,不添加任何事件,优化后需要对应文本控件和下拉框控件写入不同的javascript事件。
(一)文本控件
代码如下:
var value = this.getValue();
contentPane.setCellValue(5,1,value);
(二)下拉框控件
代码如下:
//移出焦点
contentPane.curLGP.selectTDCell();
此处,文本控件和下拉框控件的javascripts事件并不一样,
文本控件:为了实时更新控件值,在文本框中用的是“编辑后”事件,获取当前控件的值,再将值赋值在当前控件,可以继续编辑;而如果使用移出光标,会导致不能继续输入,需要在光标移回来才可以继续编辑,而且移动回来后控件内的值会被全部选中,需要再次单击文本末才能实现继续编辑,体验感不够圆滑,使用获取值后再赋值的方案,就不会造成上面的问题,不需要使用者移出光标或其他操作,而且可以使报表的全局参数在实时变化,不需要做按钮的点击事件,更能方便“动态参数”直接做数据钻取。
下拉框控件:使用者选中下拉框中某个数据后,直接触发“编辑后”事件,移出光标,此处不像文本框一样获取值后再赋值,是因为下拉框控件中有很多下拉数据,获取值会导致报表卡死,无法继续工作,所以此处直接移出光标即可,使报表的全局参数在选择后直接变化,及时获取控件值。
3、效果图:
如上,就可以解决控件值刷新不及时的问题,使得报表全局参数在使用者的操作后直接更新,不需要使用者移出光标等操作,也不用暂用按钮控件中的点击一个事件,避免按钮多事件的冲突。
而上面的示例,也没有采用按钮,是直接使用“动态参数”,不通过参数面板进行数据过滤查询,直接在报表界面上设计参数查询样式,提供界面的方便性和自由设计。