2012-01-17 61 views
4

我想水平顯示元素(在一個「行」)。我在想象這個問題,就像一個有一行和多個列的表格一樣。此表中的每個單元格包含相同的子報表,但具有不同的數據源。如何水平顯示自定義數量的元素?

在開始時,我試圖組合一個組件列表和子報表。但事實證明,列表組件不支持水平佈局。我讀某處使用交叉表代替。但是,當我試圖將子報表插入度量單元格時,iReport會顯示一條消息,表示我無法做到這一點。那麼我能做什麼?

+0

我並不完全瞭解您的要求。你說你想使用'List'組件,但是不支持'Horizo​​ntal'佈局。所以,你正在考慮使用crosttab來水平顯示元素列表?那是你要的嗎? – bchetty 2012-01-17 21:35:41

+0

至於在交叉表內使用子報表(根據您的標題),我從來沒有嘗試過或想過這樣做......我建議不要這樣做。注意在交叉表中使用'Stretch'功能,這會使您的應用程序陷入無限循環問題。 – bchetty 2012-01-17 21:38:56

+0

嗯..我想水平顯示元素(在一個「行」)。我在想象這個問題就像一個有一行和多列動態數據的表格。此表中的每個單元格包含相同的子報表,但具有不同的數據源。 – emstol 2012-01-17 21:54:28

回答

5

根據您的上述評論,我會說,打印水平元素列表並不難。 List組件基本上是一個子報表。所以,你也可以創建一個自定義List組件,它可以水平地打印一個元素列表。您只需創建一個沒有任何邊距的新報告,將其設置爲「打印訂單」至「水平」,並根據您的要求設置列的數量。然後,您可以將此報告作爲子報告嵌入到一些主要報告中,並水平打印元素。

根據您的要求,您可以相應地設置報告和文本字段大小。以下是該報告中,我創建的截圖:

enter image description here

這裏就是我創建的示例JRXML文件:

<?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="report name" columnCount="5" printOrder="Horizontal" pageWidth="595" pageHeight="842" columnWidth="119" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="0"/> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band splitType="Stretch"/> 
    </title> 
    <pageHeader> 
     <band splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band splitType="Stretch"/> 
    </columnHeader> 
    <detail> 
     <band height="20" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="0" width="100" height="20"/> 
       <textElement textAlignment="Center" verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{field}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
    <columnFooter> 
     <band splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band splitType="Stretch"/> 
    </summary> 
</jasperReport> 
+0

好的。據我瞭解,你建議在創建報告時設置足夠數量的頁面列(例如6)。並且稍後僅使用其中的一部分(例如其中的前3個)。這說得通。 – emstol 2012-01-18 07:21:51

0

@bchetty:對不起,我選擇了,因爲我不回答,而不是評論有足夠的聲譽來這樣做。你發佈的解決方案工作正常,但它使報表佈局非常不好。對於我將列大小保持爲20的情況,我有一個很好的要求,但是我無法預測它在某些查詢中不會跨越20。同樣,如果只從列的查詢中提取三個值,則剩餘列空間保持爲空,並且不會爲生成的報告提供良好的佈局。

我在iReport終極指導書中讀到,如果List被用作子報告,而printOrder「橫向」我們可以得到動態列的效果。但我想這只是一個「效應」,實際上並不是動態列,因爲列大小必須固定爲大於1的某個值。

我在智慧結束嘗試實現這一點,但我想我可能不得不放棄。交叉表無法解救,因爲它受到兩個行組和兩個列組的限制。但是報告還有其他必須與動態列一起打印的字段。 Printing a sub report data horizontally