知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > 设计基础 > 在报表组中实现Sheet间的跳转

在报表组中实现Sheet间的跳转

报表组的功能很强大,可以实现一些单个报表实现不了的功能。但是由于客户需求的多样化,有些功能还不能直接实现,比如点击一个sheet页面中的订单ID然后在另一个sheet页面显示该订单的明细。

本文就来通过例子说明怎样间接实现该功能。

做过报表组的人知道,浏览报表组的时候默认显示的第一张报表。通过查看显示报表组的页面源代码了解到报表组是把每个报表sheet的内容放在一个div中,默认显示第一个div,点击第二个报表的tab页就显示第二报表的div。所以要实现上面的功能,我们可以根据下面的思路来做。

大致思路:

首先创建一个包含两个报表的报表组,在第一个报表中创建超链接,连接到报表组本身,把订单ID和需要显示的哪个层的标志传递给报表组,第二个报表根据订单ID查询订单明细,报表组再根据显示层标志来显示相应的div。比如这个超链接:”/reportJsp/showReportGroupTest.jsp?rpg=/group/group.rpg&order=”+A2+”&showFlag=2″

就是显示第二个div并根据订单idA2单元格的值查询显示相应的订单明细。

制作步骤

 

第一步制作sheet报表组

 

打开快逸复杂报表设计" target="_blank" class="quieeLink1">设计器,连接demo数据源,新建一张空白报表,命名为”订单主表”。新建数据集ds1,sql语句为:” ELECT 订单.订单ID,订单.订购日期,订单.货主名称,订单.货主地区,订单.到货日期 FROM 订单 WHERE 订单.订单ID like ’105__’ ORDER BY 订单.订单ID ASC”

单元格中输入内容如下:

A1: 订单ID

B1: 订购日期

C1: 货主名称

D1: 货主地区

E1: 到货日期

A2: =ds1.Select(订单ID)

B2: =ds1.订购日期

C2: =ds1.货主名称

D2: =ds1.货主地区

E2: =ds1.到货日期

报表组中sheet的调转1.png

再新建一张空白报表,另存为”订单明细”,新建一个参数”order”用来接收第一个报表传递过来的订单ID,新建数据集ds1,sql语句:

“SELECT 订单明细.订单ID,订单明细.产品ID,订单明细.单价,订单明细.折扣,订单明细.数量 FROM 订单明细 WHERE 订单明细.订单ID =? ORDER BY 订单明细.订单ID ASC”

在数据集编辑界面增加一个参数”order”,

这个数据集用于订单明细。再新增一个数 据集ds2,sql语句:

“SELECT 产品.产品ID,产品.产品名称 FROM 产品”,

用于显示产品的中文名字。

单元格中输入的内容如下:

A1:订单ID

B1: 产品

C1: 单价

D1: 折扣

E1: 数量

A2: =ds1.Select(订单ID)

B2: =ds1.产品ID

C2: =ds1.单价

D2: =ds1.折扣

E2: =ds1.数量

报表组中sheet的调转2.png

选中B2单元格,设置显示值表达式为”ds2.select1(产品名称,产品ID==value())”。

 

新建一个报表组,把刚才创建的两个报表添加到报表组中,报表组命名为group.

报表组中sheet的调转3.png

上图中url类型最好使用相对路径。

给报表组定义一个参数”order”,用于接收第一个报表传过来的订单ID。如下图

报表组中sheet的调转4.png

设置报表组和报表之间的参数传递,选中下图中的”订单明细”点击右键

报表组中sheet的调转5.png

选择”报表项设置”,如下图

报表组中sheet的调转6.png

点击上图中的”+”号,增加报表组和报表之间传递的参数”order”。

 

第二步.设置超链接

在设计器打开订单主表,选中A2单元格,在超链接的表达式窗口中输入”"/reportJsp/showReportGroupTest.jsp?rpg=/group/group.rpg&order=”+A2+”&showFlag=2″”。如下图:

报表组中sheet的调转7.png

第三步.制作解析报表组的jsp

新建一个jsp,另存为showReportGroupTest.jsp,用于解析刚才创建的报表组。内容如下

<%@ page contentType=”text/html;charset=GBK” %>

<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %>

<%@ page import=”java.io.*”%>

<%@ page import=”java.util.*”%>

<html>

<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>

<%

//接收参数,把参数拼成name=value;name2=value2;…..的形式

StringBuffer param=new StringBuffer();

Enumeration paramNames = request.getParameterNames();

if(paramNames!=null){

while(paramNames.hasMoreElements()){

String paramName = (String) paramNames.nextElement();

String paramValue=request.getParameter(paramName);

if(paramValue!=null){

//把参数拼成name=value;name2=value2;…..的形式

param.append(paramName).append(“=”).append(paramValue).append(“;”);

}

}

}

%>

<!–导入存有工具栏的jsp–>

<jsp:include page=”toolbar.jsp” flush=”false” />

<table align=center>

<tr><td>

<report:group groupFileName=”group.rpg”

funcBarLocation=”"

exceptionPage=”/reportJsp/myError2.jsp”

params=”<%=param.toString()%>”

/>

</td></tr>

</table>

<%

//得到显示哪个div的标志

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

if(“2″.equals(showFlag)){%>

//标志为2的时候就显示第二张报表,就是div名字为div_item2的层

<script language=”javascript”>

//显示第二个报表的div,隐藏第一个报表的div

document.getElementById( “div_item1″ ).style.display = “none”;

document.getElementById( “div_item2″ ).style.display = “”;

//更改tab页字体的颜色

document.getElementById(“tab_item1″).className=”";

document.getElementById(“tab_item2″).className=”rq_curr”;

</script>

<%}else{%>

//显示第一个报表的div,隐藏第二个报表的div

<script language=”javascript”>

document.getElementById( “div_item1″ ).style.display = “”;

document.getElementById( “div_item2″ ).style.display = “none”;

document.getElementById(“tab_item1″).className=”rq_curr”;

document.getElementById(“tab_item2″).className=”";

</script>

<%}%>

<script language=”javascript”>

//重新定义第二个报表tab页的点击事件

document.getElementById(‘tab_item2′).onclick=function()

{ //显示第二个报表的div,隐藏第一个报表的div

document.getElementById( “div_item1″ ).style.display = “none”;

document.getElementById( “div_item2″ ).style.display = “”;

//更改tag标签字体的颜色

document.getElementById(“tab_item1″).className=”";

document.getElementById(“tab_item2″).className=”rq_curr”;

//调用快逸自定义的tab页自定义函数

_groupClicked(document.getElementById(‘tab_item2′));

}

//重新定义第一个报表tab页的点击事件

document.getElementById(‘tab_item1′).onclick=function(){

document.getElementById( “div_item1″ ).style.display = “”;

document.getElementById( “div_item2″ ).style.display = “none”;

document.getElementById(“tab_item1″).className=”rq_curr”;

document.getElementById(“tab_item2″).className=”";

_groupClicked(document.getElementById(‘tab_item1′));

}

</script>

</body>

</html>

第四步.运行浏览

运行设计器中内置的tomcat,在IE输入url:http://127.0.0.1:6001/quiee/reportJsp/showReportGroupTest.jsp,运行效果如下

报表组中sheet的调转8.png

点击上图红框中的订单ID,就可以显示下面的效果

报表组中sheet的调转9.png

 

总结:以后用户如果再遇到类似这样的需求,就可以按照上面的方法解决了。

本文标签:
发布日期:2009/11/20
本文分类: 设计基础