第六章 BIRT普通网格报表(续2) .

6.6 数据项上的鼠标事件

在大纲视图下,选中数据源,数据集,主体中的网格,行,单元格,表,表的行,单元格,以及参数等中的任何一个,都能在报表编辑器的脚本选项卡下面看到可以编写脚本的输入区,这是BIRT提供给设计者一个非常强大的接口,可以添加很多的事件。


具体能分为两个阶段:

报表生成阶段的事件: 

1、 报表级事件: 

initialize 在报表开始执行生成阶段前执行。包含定义全局变量、函数、和对象。 

beforeFactory :在开始生成阶段之前执行。可以访问报表中的元素。如数据集、标签等等。 

afterFactory:在开始生成阶段阶段之前执行 

2、 数据源事件: 

beforeOpen:在BIRT打开数据源连接之前执行,一般进行连接数据源的配置信息的编写,包括:驱动、数据库的URL、用户名、密码等等。 

AfterOpen :在BIRT打开数据源连接之后执行 

BeforeCLose::在BIRT关闭数据源连接之前执行 

afierClose: BIRT关闭数据源连接之后执行 

3、 数据集事件: 

beforeOpen:在BIRT打开数据集之前执行,一般编写要执行的SQL语句。 

AfterOpen :在BIRT打开数据集之后执行 

Onfetch:获取每一行的数据以后,并应用过滤器计算列之前执行onFetch事件处理程序。 

BeforeCLose::在BIRT关闭数据源连接之前执行 

afierClose: BIRT关闭数据源连接之后执行 

4、报表元素事件: 

onPrepare:在报表生成阶段调用,并且针对报表设计中的每一个元素,在此事件中就可以修改元素的设计。 

onCreate:在此事件中可以修改和访问元素的实例。 

报表显示阶段事件: 

1、报表级事件: 

initialize : 在报表开始执行显示阶段前执行。在初始化事件中可以定义全局变量、函数、和对象。 

beforeRender:在开始显示阶段前执行。 

afterRender:在开始显示阶段后执行。 

2、报表元素事件: 

onRender:可以改变元素实例。

在下拉框为以上函数的输入区内,我们都可以编写javascript脚本,用来改变报表的显示。

具体的机制和用法我们在后面的章节再详细说明,在这儿我们仅仅利用动态文本的onRender函数,来给报表添加鼠标事件。

我们新建一个报表overall2.rptdesign,采用示例数据库,空白模板,sql选择查询数据源,数据集

select CLASSICMODELS.PRODUCTS.PRODUCTNAME,

sum(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as "sales"

from CLASSICMODELS.ORDERS, CLASSICMODELS.ORDERDETAILS, CLASSICMODELS.PRODUCTS

where (CLASSICMODELS.ORDERS.ORDERNUMBER = CLASSICMODELS.ORDERDETAILS.ORDERNUMBER)

and (CLASSICMODELS.ORDERDETAILS.PRODUCTCODE = CLASSICMODELS.PRODUCTS.PRODUCTCODE)

and (CLASSICMODELS.PRODUCTS.PRODUCTLINE = 'Classic Cars')

group by CLASSICMODELS.PRODUCTS.PRODUCTNAME

插入一个11列的网格,在网格中插入12列的表,在报表编辑器中布局如下:



第二个单元格拖入dataSetRow["sales"]

我们选中动态文本,在脚本选项卡下,选择onRender方法,输入以下内容:

[javascript] view plain copy print ?
  1. var value1=row["PRODUCTNAME"];  
  2. var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer2'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer2'].location = origUrl.substr(0, pos)   + '&__overwrite=true&productname='+paravalue ;} else {parent.frames['birtViewer2'].location = origUrl+ '&__overwrite=true&productname='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value1 + "</b></u></i></a>";  
  3. this.text = str;  
var value1=row["PRODUCTNAME"];
var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer2'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer2'].location = origUrl.substr(0, pos)	+ '&__overwrite=true&productname='+paravalue ;} else {parent.frames['birtViewer2'].location = origUrl+ '&__overwrite=true&productname='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value1 + "</b></u></i></a>";
this.text = str;


说明:该脚本的含义是插入了一个超链接,单击触发事件,javascript脚本的含义是修改idbirtViewers2的报表地址,拼接上参数productname为当前报表行row["PRODUCTNAME"],这样就实现了动态刷新嵌入有product.rptdesignframe,让报表只显示单击后的产品名称的产品销售明细。

我们新建一个报表product.rptdesignDBC报表类型,SQL查询类型的空白模板

数据源MyDataSource,采用BIRT设计器自带的例子数据库:

驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)

Database URLjdbc:classicmodels:sampled

用户名:ClassicModels

数据集TrendDataSet,查询SQL如下:

select CLASSICMODELS.PRODUCTS.PRODUCTNAME,

(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as sales,

CLASSICMODELS.ORDERS.ORDERDATE

from CLASSICMODELS.ORDERS,

CLASSICMODELS.ORDERDETAILS,

CLASSICMODELS.PRODUCTS

where (CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE)

and (CLASSICMODELS.ORDERS.ORDERNUMBER = CLASSICMODELS.ORDERDETAILS.ORDERNUMBER)

and (CLASSICMODELS.PRODUCTS.PRODUCTNAME = ?)

报表参数productname,字符串静态文本框,默认值为:1992 Ferrari 360 Spider red,如图:


绑定数据集TrendDataSet占位符和报表参数productname,如图


新建一行一列网格,在网格框内插入图表,选择图表类型为折线图,如图,


选择数据,使用以下来源的数据-TrendDataSet,类别(X)系列选择可用列绑定-图表- row["ORDERDATE"],值(Y)系列选择可用列绑定-图表- row["SALES"],如图。


在图表格式中定制X轴,把标签顺时针旋转45度,如图,


<page-footer>

      <text id="3">

           <property name="contentType">html</property>

              <text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>

              </text>

</page-footer>

关于图表的设计,后文还会详细描述。

我们新建一个jsp,包含两个frame,然后用前frame中表中数据项的鼠标事件来刷新第二个frame中的内容:

  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2. pageEncoding="ISO-8859-1"%>  
  3. <%@ taglib uri="/birt.tld" prefix="birt" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  8.     <meta http-equiv="Content-Language" content="en-us">  
  9.     <title>BIRT JSP Tag Lib Mashup</title>  
  10.     <style>  
  11.         .pageHeader {  
  12.             position: absolute;  
  13.             width: 1020px;  
  14.             text-align: center;  
  15.             color: #224499;  
  16.             font-size: xx-large;  
  17.             font-weight: bold;  
  18.         }  
  19.           
  20.         .mashupContainer {  
  21.             position: absolute;  
  22.             font-family: Verdana, Tahoma, Arial;  
  23.             font-size: 11px;  
  24.             border: 1px solid #87AFDA;  
  25.             margin: 3px;  
  26.         }  
  27.           
  28.         .mashupTitle {  
  29.             position: absolute;  
  30.             background: #D4E6FC;  
  31.             font-size: 14px;  
  32.             font-weight: bold;  
  33.             color: #224499;  
  34.             padding: 3px;  
  35.             border-bottom: 1px solid #87AFDA;  
  36.         }  
  37.           
  38.         .mashupContent {  
  39.             position: absolute;  
  40.             padding: 3px;  
  41.         }  
  42.     </style>  
  43. </head>  
  44. <body>  
  45.     <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 20px; width: 655px; height: 400px;">  
  46.         <div class="mashupTitle" style="width: 99.1%; height: 20px;">overall Chart</div>  
  47.         <div class="mashupContent" id="overallDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">  
  48.             <birt:viewer id="birtViewer"  
  49.                 reportDesign="overall2.rptdesign"  
  50.                 baseURL="<%= request.getContextPath( )%>"  
  51.                 pattern="run"  
  52.                 height="367"  
  53.                 width="645"  
  54.                 format="html"  
  55.                 frameborder="false"  
  56.                 isHostPage="false"  
  57.                 isReportlet="true"  
  58.                 showParameterPage="false"  
  59.             >  
  60.             </birt:viewer>  
  61.         </div>  
  62.     </div>  
  63.   
  64.     <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 700px; width: 655px; height: 400px;">  
  65.         <div class="mashupTitle" style="width: 99.1%; height: 20px;">trend Chart</div>  
  66.         <div class="mashupContent" id="trendDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">  
  67.             <birt:viewer id="birtViewer2"  
  68.                 reportDesign="product.rptdesign"  
  69.                 baseURL="<%= request.getContextPath( )%>"  
  70.                 pattern="run"  
  71.                 height="367"  
  72.                 width="645"  
  73.                 format="html"  
  74.                 frameborder="false"  
  75.                 isHostPage="false"  
  76.                 isReportlet="true"  
  77.                 showParameterPage="false"  
  78.             >  
  79.             </birt:viewer>  
  80.         </div>  
  81.     </div>  
  82.       
  83. </body>  
  84. </html>  
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/birt.tld" prefix="birt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<meta http-equiv="Content-Language" content="en-us">
	<title>BIRT JSP Tag Lib Mashup</title>
	<style>
		.pageHeader {
			position: absolute;
		    width: 1020px;
		    text-align: center;
			color: #224499;
			font-size: xx-large;
			font-weight: bold;
		}
		
		.mashupContainer {
			position: absolute;
			font-family: Verdana, Tahoma, Arial;
			font-size: 11px;
			border: 1px solid #87AFDA;
			margin: 3px;
		}
		
		.mashupTitle {
			position: absolute;
			background: #D4E6FC;
			font-size: 14px;
			font-weight: bold;
			color: #224499;
			padding: 3px;
			border-bottom: 1px solid #87AFDA;
		}
		
		.mashupContent {
			position: absolute;
			padding: 3px;
		}
	</style>
</head>
<body>
	<div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 20px; width: 655px; height: 400px;">
		<div class="mashupTitle" style="width: 99.1%; height: 20px;">overall Chart</div>
		<div class="mashupContent" id="overallDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
			<birt:viewer id="birtViewer"
				reportDesign="overall2.rptdesign"
				baseURL="<%= request.getContextPath( )%>"
				pattern="run"
				height="367"
				width="645"
				format="html"
				frameborder="false"
				isHostPage="false"
				isReportlet="true"
				showParameterPage="false"
			>
			</birt:viewer>
		</div>
	</div>

	<div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 700px; width: 655px; height: 400px;">
		<div class="mashupTitle" style="width: 99.1%; height: 20px;">trend Chart</div>
		<div class="mashupContent" id="trendDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
			<birt:viewer id="birtViewer2"
				reportDesign="product.rptdesign"
				baseURL="<%= request.getContextPath( )%>"
				pattern="run"
				height="367"
				width="645"
				format="html"
				frameborder="false"
				isHostPage="false"
				isReportlet="true"
				showParameterPage="false"
			>
			</birt:viewer>
		</div>
	</div>
	
</body>
</html>

我们把这三个文件部署到服务器上,就可以看到效果如下:


单击左边的商品名称,会看到右边的趋势图随之发生变化。

利用这种特性,我们可以进行动态的排序

例如我们新建报表,customer.rptdesign,自带数据库,空白模板,sql选择查询数据集:

select *

from customers

新建参数srt


我们在报表编辑器中插入一个101列的表,把数据集中的数据列拖入表中:


分别修改customernumbercustomernamecontactlastname的页眉,删除数据,插入动态文本,

其中customernumber页眉的动态文本使用可用列绑定row["CUSTOMERNUMBER"],在脚本的onRender中输入:

[javascript] view plain copy print ?
  1. var value1= "firstcol";  
  2. var value2= "CUSTOMERNUMBER";  
  3. var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer1'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer1'].location = origUrl.substr(0, pos)   + '&__overwrite=true&srt='+paravalue ;} else {parent.frames['birtViewer1'].location = origUrl+ '&__overwrite=true&srt='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value2 + "</b></u></i></a>";  
  4. this.text = str;  
var value1= "firstcol";
var value2= "CUSTOMERNUMBER";
var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer1'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer1'].location = origUrl.substr(0, pos)	+ '&__overwrite=true&srt='+paravalue ;} else {parent.frames['birtViewer1'].location = origUrl+ '&__overwrite=true&srt='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value2 + "</b></u></i></a>";
this.text = str;

其中customername页眉的动态文本使用可用列绑定row["CUSTOMERNAME"],在脚本的onRender中输入:

[javascript] view plain copy print ?
  1. var value1= "secondcol";  
  2. var value2= "CUSTOMERNAME";  
  3. var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer1'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer1'].location = origUrl.substr(0, pos)   + '&__overwrite=true&srt='+paravalue ;} else {parent.frames['birtViewer1'].location = origUrl+ '&__overwrite=true&srt='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value2 + "</b></u></i></a>";  
  4. this.text = str;  
var value1= "secondcol";
var value2= "CUSTOMERNAME";
var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer1'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer1'].location = origUrl.substr(0, pos)	+ '&__overwrite=true&srt='+paravalue ;} else {parent.frames['birtViewer1'].location = origUrl+ '&__overwrite=true&srt='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value2 + "</b></u></i></a>";
this.text = str;

其中contactlastname页眉的动态文本使用可用列绑定row["CUSTOMERNAME"],在脚本的onRender中输入:

[javascript] view plain copy print ?
  1. var value1= "secondcol";  
  2. var value2="CONTACTLASTNAME";  
  3. var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer1'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer1'].location = origUrl.substr(0, pos)   + '&__overwrite=true&srt='+paravalue ;} else {parent.frames['birtViewer1'].location = origUrl+ '&__overwrite=true&srt='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value2 + "</b></u></i></a>";  
  4. this.text = str;  
var value1= "secondcol";
var value2="CONTACTLASTNAME";
var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag(paravalue){var origUrl = parent.frames['birtViewer1'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer1'].location = origUrl.substr(0, pos)	+ '&__overwrite=true&srt='+paravalue ;} else {parent.frames['birtViewer1'].location = origUrl+ '&__overwrite=true&srt='+ paravalue;} }</script><a href='' οnclick='refreshTag(\""+value1+"\")'><i><u><b>" + value2 + "</b></u></i></a>";
this.text = str;

编写jsp,测试这个脚本

  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2. pageEncoding="ISO-8859-1"%>  
  3. <%@ taglib uri="/birt.tld" prefix="birt" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  8.     <meta http-equiv="Content-Language" content="en-us">  
  9.     <title>BIRT JSP Tag Lib Mashup</title>  
  10.     <style>  
  11.         .pageHeader {  
  12.             position: absolute;  
  13.             width: 1020px;  
  14.             text-align: center;  
  15.             color: #224499;  
  16.             font-size: xx-large;  
  17.             font-weight: bold;  
  18.         }  
  19.           
  20.         .mashupContainer {  
  21.             position: absolute;  
  22.             font-family: Verdana, Tahoma, Arial;  
  23.             font-size: 11px;  
  24.             border: 1px solid #87AFDA;  
  25.             margin: 3px;  
  26.         }  
  27.           
  28.         .mashupTitle {  
  29.             position: absolute;  
  30.             background: #D4E6FC;  
  31.             font-size: 14px;  
  32.             font-weight: bold;  
  33.             color: #224499;  
  34.             padding: 3px;  
  35.             border-bottom: 1px solid #87AFDA;  
  36.         }  
  37.           
  38.         .mashupContent {  
  39.             position: absolute;  
  40.             padding: 3px;  
  41.         }  
  42.     </style>  
  43. </head>  
  44. <body>  
  45.     <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 20px; width: 1200px; height: 400px;">  
  46.         <div class="mashupTitle" style="width: 99.1%; height: 20px;">customer</div>  
  47.         <div class="mashupContent" id="customer" style="top: 24px; left: 0px; width: 99%; height: 380px;">  
  48.             <birt:viewer id="birtViewer1"  
  49.                 reportDesign="SortTable.rptdesign"  
  50.                 baseURL="<%= request.getContextPath( )%>"  
  51.                 pattern="run"  
  52.                 height="367"  
  53.                 width="1150"  
  54.                 format="html"  
  55.                 frameborder="false"  
  56.                 isHostPage="false"  
  57.                 isReportlet="true"  
  58.                 showParameterPage="false"  
  59.             >  
  60.             </birt:viewer>  
  61.         </div>  
  62.     </div>      
  63. </body>  
  64. </html>  
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/birt.tld" prefix="birt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<meta http-equiv="Content-Language" content="en-us">
	<title>BIRT JSP Tag Lib Mashup</title>
	<style>
		.pageHeader {
			position: absolute;
		    width: 1020px;
		    text-align: center;
			color: #224499;
			font-size: xx-large;
			font-weight: bold;
		}
		
		.mashupContainer {
			position: absolute;
			font-family: Verdana, Tahoma, Arial;
			font-size: 11px;
			border: 1px solid #87AFDA;
			margin: 3px;
		}
		
		.mashupTitle {
			position: absolute;
			background: #D4E6FC;
			font-size: 14px;
			font-weight: bold;
			color: #224499;
			padding: 3px;
			border-bottom: 1px solid #87AFDA;
		}
		
		.mashupContent {
			position: absolute;
			padding: 3px;
		}
	</style>
</head>
<body>
	<div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 20px; width: 1200px; height: 400px;">
		<div class="mashupTitle" style="width: 99.1%; height: 20px;">customer</div>
		<div class="mashupContent" id="customer" style="top: 24px; left: 0px; width: 99%; height: 380px;">
			<birt:viewer id="birtViewer1"
				reportDesign="SortTable.rptdesign"
				baseURL="<%= request.getContextPath( )%>"
				pattern="run"
				height="367"
				width="1150"
				format="html"
				frameborder="false"
				isHostPage="false"
				isReportlet="true"
				showParameterPage="false"
			>
			</birt:viewer>
		</div>
	</div>	
</body>
</html>

修改布局,适当美化:


部署到服务器上,预览效果如下:


单击customername,排序后显示如下:


当然还可以按照contactlastname排序。

利用这种方式,我们可以添加数据项上的鼠标帮助,鼠标单击响应,还可以添加超链接转跳。

var str=row.__rownum+""+row["CUST_ID"]+":"+row["CUST_NAME"]+":"+row["SUPPERID"]+":"+row["UPNAME"];

添加鼠标帮助和单击事件如下:

this.text="<a href='' alt=''  title='"+str+"' onClick='alert(\""+str+"\")'><i><u><b>查看行参数</b></u></i></a>";

添加转跳如下

this.text="<a href='../frameset?__report=overall.rptdesign' alt='单击会显示另外一张报表'  title='单击会显示另外一张报表' >查看</a>";

需要说明的是:前面javascript脚本用parent.frames['birtViewer1']是因为在runtime环境下,报表本身是放在一个frame中的,需要指定父frame再寻找改变地址。

而此处的a href='../frameset?__report=overall.rptdesign的意思是要返回到父目录上再去调用url链接。

6.7 外部脚本的使用,样式,模板,库,与资源

我们编写一个脚本combine.js:

function combine(num1, num2) {

    var str = num1 + '_' + num2;

    return str;

}

把文件复制到报表共享资源中,用报表的属性的标签资源导入:


反映到xml中,则是添加了如下几行:

<list-property name="includeScripts">

        <property>combine.js</property>

</list-property>

以后在任何需要的表达式生成器中都可以使用


同理我们可以导入propertiesjar文件,然后在javascript脚本事件处理或者脚本生成器中使用。如果发布到环境中,则需要配置资源的路径,默认路径为应用根目录下。配置如下为web.xml下的context-param:

<context-param>
  <param-name>BIRT_VIEWER_SCRIPTLIB_DIR</param-name>
  <param-value></param-value>
 </context-param>

我们可以新建,编辑,删除,应用样式:



实际上熟悉css的可以直接导入样式。

然后我们在需要使用的地方右击,应用样式即可。需要注意的是,样式最好要匹配,即页面,网格,表,页眉,页脚,行,列,单元格,分组等等元素的样式最好用不同的名称区分开来,使用也是区分使用。

库是一个工程下所有报表都可以调用的资源。

新建库很简单,只需要在资源管理器的共享资源目录上右击选择新建库即可,或者在菜单中的文件菜单下新建:


添加库元素的方法是,在大纲视图下右击需要添加的库元素,选择导出到库即可:


报表本身,数据源,数据集,样式,表,网格,参数,脚本都可以导出到库。

使用方法则是,在资源管理器的共享资源目录下的库元素上右击,选择添加到报表即可。


发布的时候,需要把库和报表一起发布,并处在同一个路径下。

使用了库的报表,会增加一个锁链标志,


xml中会出现类似如下的语句:

  1. <list-property name="libraries">  
  2.         <structure>  
  3.             <property name="fileName">common.rptlibrary</property>  
  4.             <property name="namespace">common</property>  
  5.         </structure>  
  6. </list-property>  
<list-property name="libraries">
        <structure>
            <property name="fileName">common.rptlibrary</property>
            <property name="namespace">common</property>
        </structure>
</list-property>

库的使用也要遵循一一匹配的同类原则,不要把脚本数据源添加到另一个不需要脚本数据源的交叉报表中。

模板和报表很像,或者你直接把报表改后缀名new_template.rpttemplate为new_template.rptdesign即可运行。建立模板的方式和建立报表的方式一样。不过如果想要在新建报表中使用模板,需要先注册:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值