下拉列表框动态刷新值

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

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

既然动态过滤实现不了,但我们可以想到报表本身提供有自动计算功能,自动计算又支持自定义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>

六、测试结果

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

润乾在线设计

热门文章