报表知识库
我要提问

报表中下拉列表框动态刷新值

润乾报表提供有动态过滤功能, 即两个下拉框的数据是存在业务联系的,例如一个是省份的下拉数据集,另一个是城市的下拉数据集,当省份的下拉数据集选择山东时,城市的下拉数据集只有选择山东省的城市,才是合理的数据,否则会出现错误。那么如果有类似城市中只有一个值的情况,比如如何根据下拉选择各类产品对应的唯一单价呢?

下面就分析找出问题的解决思路:

既然动态过滤实现不了,但我们可以想到报表本身提供有自动计算功能,自动计算又支持自定义js函数,js函数本身还可以引用ajax方式,于是我们就可以得出,利用自定义js函数(ajax)异步获取下拉列表产品中对应的数据库中的单价。

以下内容将介绍具体的实现过程:

一、数据准备

建表语句:

CREATE TABLE productdemo (

  productName varchar(10) default NULL,

  price float default NULL

);

初始化数据:

insert into productdemo (productName, price) values(‘无机酸’,’300′);

insert into productdemo (productName, price) values(‘氧化锌’,’128′);

insert into productdemo (productName, price) values(‘氮肥’,’100′);

insert into productdemo (productName, price) values(‘乙二醇’,’245′);

 

二、填报表设计

 

数据集:SELECT productdemo.productName,productdemo.price FROM productdemo

A2:填报风格–下拉数据集

 

B2:自动计算设置函数 genResName(A2)

三、JS函数定义

                   var xhr;

                   function genResName(str1){

                            //item1_A3

                            var sss = document.getElementById(‘report1_A2′).value;

                            // alert(sss);

                            if (document.XMLHttpRequest) { 

                               xhr = new XMLHttpRequest(); 

                            } else {                       

                             xhr = new ActiveXObject(“Microsoft.XMLHTTP”);

                            }

                            //获取查询到的单价值

                            xhr.open(‘GET’,'<%=request.getContextPath()%>/wbAjax1.do?val=’+sss);

                            //设置回调函数

                            xhr.onreadystatechange = function(){

                                                 var ready = xhr.readyState;

                                                 if (ready == 4){

                                                          parseCompletedResponse(xhr);

                                                 }

                                               };

                            xhr.send(”);  

                   }

             function parseCompletedResponse(xhr)

             {

                       var str = xhr.responseText;

                            //修改单价值

                       document.getElementById(‘report1_B2′).innerHTML = str;

             }

四、获取单价值处理类

主要代码如下:

        String val = request.getParameter(“val”);

        String res = “”;

        //Context ctx = new Context();

        DBAccess dba = new DBAccess();

        Connection conn = dba.getConnectionFromDBA();

        PreparedStatement ps = null;

        ResultSet rs = null;

        //String sql = “select res_type_name from t_res_type where res_type_id=?”;

        String sql = “select price from productdemo where productname=?”;

          ps = conn.prepareStatement(sql);

          ps.setString(1, val);

          rs = ps.executeQuery();

          while (rs.next()) {

          //获取单价值

            res = rs.getString(“price”);

          }

        PrintWriter out = response.getWriter();

        //返回单价值

    out.print(res);

五、配置文件修改web.xml

增加如下,

  <servlet>

    <servlet-name>WBajax1</servlet-name>

    <servlet-class>example.WBajax1</servlet-class>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>WBajax1</servlet-name>

    <url-pattern>/wbAjax1.do</url-pattern>

  </servlet-mapping>

六、测试结果

 

通过以上几步即可完成描述中的功能,附件是实现的例子,可参考例子了解具体的实现过程。

标签: