润乾报表 - 异步加载动态过滤下拉表实例

如下是异步加载动态过滤下拉表的做法,但近看该说明还是有大部分用户做不出来,本文将结合实例介绍具体的实现方式。

做法:

1、设计器设计参数表单,假如有两个下拉数据表 A、B,分别对应参数 arg1、arg2,选择 A 以后过滤 B。设计时 A 设计完整,B 可以设计时加一个过滤条件让它取不到数或数据特少。

2、在显示参数表单的 jsp 里,用户写一个下面这样的 js 函数,这是下拉表选择后会调用的 js 函数,cellId 是下拉控件所在单元格 id,newValue 是新的下拉值, argName 是参数名

function _selectValueChanged(cellId,newValue, argName) {

       if(argName == “productTypes”) {

              varparams = {“arg1”: newValue};

              $.post(url, params, function( data) {

                     data= eval(“(” + data.trim() + “)”);

                     $(“#arg2”).combobox(“loadData”, data); // 将新的节点数据设置到 arg2

              },“text”);

       }

}

示例中的 url 是服务器上的一个 servlet 或 jsp 等服务程序, 根据 ajax 传上去的参数 params,为 arg2 取回新的数据,数据的格式如下:

[{v:“v1”,d:“选项 1”},{v:“v2”,d:“选项 2”},……,{v:“vn”,d:“选项 n”}]

v 表示真实值,d 表示显示值

具体实现:

1、 准备一个参数表单及结果报表

(1)    参数表单:产品类别(web 名:productTypes)、产品名称(productName)

选择产品类别后 有后台计算对应的可选产品名称列表并返回给 下拉列表

(2)    结果报表仅演示接收两个

2、 Jsp 内定义上面 2 中的方法

function_selectValueChanged(cellId, newValue, argName) {

// 如果是 productTyps 下拉,则触发

if(argName == “productTypes”) {

     varurl = “rv.jsp”;// 异步请求的服务器文件,此处为 jsp

        var params = {“productTypes”:newValue};

        $.post(url, params, function( data) {

               alert(data);

               data = eval(“(” +data.trim() + “)”);

               $(“#productName”).combobox(“loadData”, data); // 将新的节点数据设置到 productName 下拉项

        }, “text”);

}

}

3、 定义异步处理并返回数据的 url

看上一步 url 为 rv.jsp(与展现报表的 jsp 同目录),核心代码:

<%@ page contentType=“text/html;charset=UTF-8” %>

<%

// 定义并返回规定格式的串

String strv =“[{v:‘2’,d:‘22’},{v:‘1’,d:‘11’},{v:‘3’,d:‘33’}]”;

out.print(strv);

%>

4、 看效果

产品名称处的下拉可选项即改变为 赋值后的数据。

注:url 的 jsp 可以接受到参数后处理更复杂的逻辑再返回(如最简单的根据所选类别,后台数据库帅选出合适的数据),本文为结合实例讲解具体的流程,方便大家上手。

更多特殊报表相关问题请查看:报表样式汇总相关问题分类导航
* 报告式报表的制作
* 报表中如何实现不规则布局
* 报表工具轻松搞定卡片式报表
* 在列数固定的报表中逐格横向填充数据并折行
* 如何在分组报表中实现组内数据补空行及组内页码
* 日历类报表可以这样实现