鍍金池/ 教程/ Java/ JasperReports報(bào)表變量
JasperReports報(bào)表數(shù)據(jù)源
JasperReport查看和打印報(bào)告
JasperReports報(bào)表表達(dá)式
JasperReport報(bào)表設(shè)計(jì)
JasperReports報(bào)表區(qū)段
JasperReports報(bào)表字段
JasperReports報(bào)表變量
JasperReport生命周期
JasperReport填充報(bào)表
JasperReport編譯報(bào)表設(shè)計(jì)
JasperReport報(bào)表參數(shù)
JasperReports入門,JasperReports是什么?
JasperReports報(bào)表組
JasperReport導(dǎo)出報(bào)表
JasperReports教程
JasperReport環(huán)境設(shè)置

JasperReports報(bào)表變量

報(bào)表變量是建立在報(bào)表表達(dá)式之上的特殊對(duì)象。報(bào)表變量簡(jiǎn)化以下任務(wù):

  • 報(bào)表,其中大量使用在整個(gè)報(bào)告模板表達(dá)式。這些表達(dá)式可以通過(guò)使用報(bào)表變量只能聲明一次。

  • 計(jì)數(shù),求和,平均,最低,最高,方差等:報(bào)表變量可以基于像對(duì)應(yīng)的表達(dá)式的值執(zhí)行各種計(jì)算

如果變量是在報(bào)表設(shè)計(jì)定義,那么這些可以通過(guò)在表達(dá)式中的新變量引用。因此,在該變量是在報(bào)表設(shè)計(jì)中聲明的順序是非常重要的。

變量聲明

變量聲明如下:

<variable name="CityNumber" class="java.lang.Integer" incrementType="Group"
   incrementGroup="CityGroup" calculation="Count">
   <variableExpression>
       <![CDATA[Boolean.TRUE]]>
   </variableExpression>
</variable>

如上面所看到的,<variable>元素包含屬性的數(shù)量。這些屬性總結(jié)如下:

name屬性

類似的參數(shù)和字段,</variable>元素的name屬性是強(qiáng)制性的。它允許引用由它的聲明的名稱在報(bào)表表達(dá)式中的變量。

class屬性

class屬性也是強(qiáng)制性的,它指定了變量值的類名。它的默認(rèn)值是java.lang.String。這是可以改變的,在classpath可用的任何類無(wú)論是在報(bào)表編譯時(shí)間和報(bào)告充填時(shí)間。無(wú)論報(bào)告值的類型,引擎采用該$V {}標(biāo)記是用來(lái)報(bào)告表達(dá),從而不必要手動(dòng)投射。

計(jì)算方法

這個(gè)屬性決定的變量填充報(bào)表時(shí)要執(zhí)行什么計(jì)算。下面的小節(jié)描述所有的<variable>元素的計(jì)算屬性的可能值。

  • Average: 變量的值是變量表達(dá)式的每一個(gè)非空值的平均值。有效期僅為數(shù)值變量。

  • Count: 該變量的值是變量表達(dá)式非空實(shí)例的數(shù)量。

  • First: 變量的值是變量表達(dá)式的第一個(gè)實(shí)例的值。隨后的值將被忽略。

  • Highest: 變量的值是變量表達(dá)式的最高值。

  • Lowest: 該變量的值是變量表達(dá)式在報(bào)表中的最低值。

  • Nothing: 不進(jìn)行計(jì)算的變量。

  • StandardDeviation: 該變量的值是所有非空值匹配報(bào)表表達(dá)式的標(biāo)準(zhǔn)偏差。有效期僅為數(shù)值變量。

  • Sum: 該變量的值是由報(bào)表表達(dá)式返回所有非空值的總和。

  • System: 該變量的值是一個(gè)自定義計(jì)算(計(jì)算該變量自己的值,使用JasperReports小腳本功能)

  • Variance: 該變量的值是一個(gè)報(bào)表變量的表達(dá)式求值返回的所有非空值的方差。

增量FACTORYCLASS

此屬性確定填充報(bào)表上的當(dāng)前記錄時(shí),用于計(jì)算變量的值的類。默認(rèn)值是任何類實(shí)現(xiàn)net.sf.jasperreports.engine.fill.JRIncrementerFactory。工廠類將被用于由發(fā)動(dòng)機(jī)來(lái)實(shí)例化對(duì)象的增量在運(yùn)行時(shí)根據(jù)該變量中設(shè)置的計(jì)算屬性。

INCREMENTTYPE

這個(gè)決定何時(shí)重新計(jì)算變量的值。此屬性使用的值,如下:

  • Column: 該變量的值重新計(jì)算各列的結(jié)尾

  • Group: 當(dāng)指定incrementGroup改變?cè)摻M的變量值重新計(jì)算。

  • None: 該變量的值重新計(jì)算每個(gè)記錄。

  • Page: 該變量的值被重新計(jì)算在每一頁(yè)的末尾。

  • Report: 該變量的值被重新計(jì)算一次,在報(bào)表的末尾。

INCREMENTGROUP

這決定了該變量的值被重新計(jì)算,當(dāng)incrementType是組的名稱。這需要在JRXML報(bào)表模板中聲明的任何組的名稱。

RESETTYPE

這決定了當(dāng)一個(gè)變量的值被復(fù)位。此屬性使用的值,如下:

  • Column: 該變量的值復(fù)位在每一列的開(kāi)頭。

  • Group: 該變量的值是當(dāng)指定incrementGroup修改組復(fù)位。

  • None: 該變量的值不會(huì)被重置。

  • Page: 該變量的值復(fù)位在每一頁(yè)的開(kāi)頭。

  • Report: 該變量的值復(fù)位只有一次,在報(bào)表的開(kāi)頭。

RESETGROUP

這決定了該變量的值復(fù)位,當(dāng)resetType是組的名稱。該屬性的值是在JRXML報(bào)表模板中聲明的任何組的名稱。

內(nèi)置報(bào)表變量

有一些內(nèi)置的系統(tǒng)變量,準(zhǔn)備在表達(dá)式中使用,如下所示:

Variable Name 描述
PAGE_NUMBER 這個(gè)變量的值是它的當(dāng)前頁(yè)碼。它可以被用來(lái)同時(shí)顯示當(dāng)前頁(yè)面的數(shù)量和使用JasperReports文本字段的元素,evaluationTime屬性的一種特殊的功能的總頁(yè)數(shù)。
COLUMN_NUMBER 這個(gè)變量包含了當(dāng)前的列號(hào)
REPORT_COUNT 此報(bào)表變量包含的處理記錄的總數(shù)。
PAGE_COUNT 這個(gè)變量包含了生成當(dāng)前頁(yè)面時(shí)所處理的記錄數(shù)。
COLUMN_COUNT 這個(gè)變量包含了生成當(dāng)前列時(shí)所處理的記錄數(shù)。
GroupName_COUNT 這個(gè)變量的名稱是從它所對(duì)應(yīng)的組,后綴為_(kāi)COUNT序列的名稱派生的。這個(gè)變量包含的記錄在當(dāng)前組的數(shù)量。

例子

讓一個(gè)變量(countNumber)加入到現(xiàn)有的報(bào)表模板(第報(bào)表設(shè)計(jì))。我們將前綴數(shù)到每個(gè)記錄。修訂后的報(bào)告模板(jasper_report_template.jrxml)如下。將其保存到C: oolsjasperreports-5.0.1 est 目錄:

<?xml version="1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="jasper_report_template" pageWidth="595"
pageHeight="842" columnWidth="515"
leftMargin="40" rightMargin="40" topMargin="50" bottomMargin="50">
<parameter name="ReportTitle" class="java.lang.String"/>
<parameter name="Author" class="java.lang.String"/>

   <queryString>
    <![CDATA[]]>
   </queryString>

   <field name="country" class="java.lang.String">
      <fieldDescription>
         <![CDATA[country]]>
      </fieldDescription>
   </field>

   <field name="name" class="java.lang.String">
      <fieldDescription>
         <![CDATA[name]]>
      </fieldDescription>
   </field>
   <variable name="countNumber" class="java.lang.Integer" calculation="Count">
      <variableExpression>
         <![CDATA[Boolean.TRUE]]>
      </variableExpression>
   </variable>
   <title>
      <band height="70">
         <line>
            <reportElement x="0" y="0" width="515"
            height="1"/>
         </line>
         <textField isBlankWhenNull="true" bookmarkLevel="1">
            <reportElement x="0" y="10" width="515"
            height="30"/>
            <textElement textAlignment="Center">
               <font size="22"/>
            </textElement>
            <textFieldExpression class="java.lang.String">
               <![CDATA[$P{ReportTitle}]]>
            </textFieldExpression>
            <anchorNameExpression>
               <![CDATA["Title"]]>
            </anchorNameExpression>
         </textField>
         <textField isBlankWhenNull="true">
            <reportElement  x="0" y="40" width="515" height="20"/>
            <textElement textAlignment="Center">
                 <font size="10"/>
            </textElement>
            <textFieldExpression class="java.lang.String">
               <![CDATA[$P{Author}]]>
            </textFieldExpression>
         </textField>
      </band>