2013-01-24 285 views
-1

這裏的關係表如何將子報表值傳遞給主報表?

StudentName 
Course 
Marks 



Peter 
Bio 
65 

Peter 
Chem 
70 



Peter 
Music 
80 



David 
Chem 
50 

我怎樣才能讓類似以下內容

Peter   Total : 215 

Subject : Bio - 65 
Subject : Chem - 70 
Subject : Music - 80 

Peter   Total : 50 

Subject : Chem - 50 
+0

請不要在標題行中放置標籤信息。標籤系統旨在將問題妥善放置到不同類別中,並且非常適合這樣做。它甚至可以正確設置,以便在沒有幫助的情況下通過Google查找。 :-) 謝謝。 (另外,我認爲你的第二個'Total'項目應該是「David」,應該不是嗎?) –

+0

我建議改變標題 - 因爲你的問題中沒有任何內容表明子報表的用法。而且,爲了達到這個目的,子報表也是過分的。見下面的答案:) – MrsTang

回答

4

我不會用一個子報表這個,因爲這能夠以更簡單的方式來實現:您可以利用報告組和變量來實現此目的。確保數據按照輸出順序排序。

準備

  • 創建基於StudentName報表組。在報告中的報告審查員右鍵點擊iReport並選擇添加報告組。按照嚮導,爲其命名(例如Student),選擇StudentName作爲組表達式,添加頁眉但不添加頁腳。
  • 創建一個變量來保存學生的總數。右鍵單擊報表檢查器中的報表檢查器變量並選擇添加變量。在屬性面板中進行如下配置:名稱:totalMarkByStudent,變量類:java.lang.Long,Calculation:Sum,Reset類型:Group,重置組:Student,變量表達式:$ F {Marks}。其餘部分保持默認值。

報表設計

  • 將它從報告檢查領域StudentName拖放到報表設計到學生組頁眉區域。會彈出一個詢問要顯示的值的類型,選擇字段值然後單擊確定。
  • 將報表檢查器中的變量totalMarksByStudent拖放到報表設計器中,放入學生組標題欄中。點擊文本字段和在屬性面板修改以下設置:

    • 寬度200(以允許更多的空間)
    • 文本字段表達式"Total : " + $V{totalMarkByStudent}
    • 表達式類java.lang.String
    • 評價時間Group(意味着值得到評估o NCE該組的處理結束)
    • 評價小組Student
  • 拖動並從報告檢查員丟棄字段標記進入詳細信息區域中報告設計。右鍵單擊課程字段並選擇編輯表達式。將表達式切換到"Subject : " + $F{Course},然後單擊Apply。

使用此配置可​​以獲得如下圖所示的報告輸出。 report output

對於這裏的完整JRXML進一步參考使用報告組和變量:如果使用報表,而不是

我以爲子報表paraemterized與學生ID顯示

<?xml version="1.0" encoding="UTF-8"?> 
<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="report3" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0dfbb9b2-a9ce-4447-beee-37d653140dd1"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="0"/> 
    <queryString> 
     <![CDATA[select * from (
Select 'Peter' as StudentName, 'Bio' as Course, 65 as Marks 
union select 'Peter', 'Chem', 70 
union select 'Peter', 'Music', 80 
union select 'David', 'Chem', 50 
) tbl 

order by StudentName, Course]]> 
    </queryString> 
    <field name="StudentName" class="java.lang.String"/> 
    <field name="Course" class="java.lang.String"/> 
    <field name="Marks" class="java.lang.Long"/> 
    <variable name="totalMarkByStudent" class="java.lang.Long" resetType="Group" resetGroup="Student" calculation="Sum"> 
     <variableExpression><![CDATA[$F{Marks}]]></variableExpression> 
    </variable> 
    <group name="Student"> 
     <groupExpression><![CDATA[$F{StudentName}]]></groupExpression> 
     <groupHeader> 
      <band height="50"> 
       <textField> 
        <reportElement uuid="ea996b6c-d41d-47bb-bef1-5df580b5c161" x="0" y="30" width="100" height="20"/> 
        <textElement/> 
        <textFieldExpression><![CDATA[$F{StudentName}]]></textFieldExpression> 
       </textField> 
       <textField evaluationTime="Group" evaluationGroup="Student"> 
        <reportElement uuid="8ddc9b5b-9c57-4fce-8ed0-587c6b54143c" x="180" y="30" width="200" height="20"/> 
        <textElement/> 
        <textFieldExpression><![CDATA["Total : " + $V{totalMarkByStudent}]]></textFieldExpression> 
       </textField> 
      </band> 
     </groupHeader> 
    </group> 
    <detail> 
     <band height="20"> 
      <textField> 
       <reportElement uuid="f67b4e51-4da6-4758-b3d3-bd75de70c0f7" x="0" y="0" width="180" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA["Subject : " + $F{Course}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement uuid="ea82c278-d2f3-4467-bf5d-8dab9ff99ae3" x="180" y="0" width="277" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$F{Marks}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

給定學生的數據。主報告在詳細面板中顯示StudentName字段和子報告。

  • 在子報表中創建一個變量total,用於計算學生的總數。
  • 在主報告中創建變量totalByStudent,計算類型設置爲System
  • 點擊子報表,在屬性面板上點擊返回值。單擊添加並選擇:子報表變量:總計,本地目標變量:totalByStudent,休息保留爲默認值。點擊確定。
  • 將變量totalByStudent拖放到細節區域中。選擇它並在屬性面板中將評估時間設置爲樂隊。輸出將如上所示相同。

我建議使用報告組和變量的方法,因爲它降低了報告的複雜性,並且這種方式的性能會更好。

相關問題