2008-09-22 48 views
7

我想在運行時根據特定條件顯示/隱藏列。我正在使用「打印表達式」來有條件地在我的報告中顯示/隱藏此列(及其標題)。當該列被隱藏時,它將佔用的空間保持空白,這不是特別有吸引力。如何在運行時顯示/隱藏列?

如果以更有效的方式使用了額外的空間,我寧願,可能性包括:

  • 報告的寬度由隱藏列
  • 的寬度減小額外的空間分佈在其餘列

理論上,我可以通過將列(和標題)的寬度設置爲0來實現第一個,但也表明列應該調整大小以適應其內容。但JasperReports不提供「調整寬度以適合內容」選項。

另一種可能性是使用Jasper API生成報告,而不是使用XML定義報告模板。但是對於這樣一個簡單的要求,這看起來很費勁。

回答

0

如果它只是一列,是否可以將此列放在最右側,然後在表達式時使用打印。這樣中間就沒有洞了。我知道這並不理想,因爲我試圖去做你目前正在努力完成的事情,並且找不到我稱之爲好的解決方案。

第二個想法會調用報告檢查情況,來決定調用哪一個的時候要創建一個基於第一第二份報告與出列,然後。再次不理想,但會工作。

我知道這並不是您正在尋找的答案,但其中一個建議可能適用於您。

+0

第一個解決方案實際上不會工作,因爲有多個列,並且報表頭上有一個背景顏色,所以如果缺少列,它仍然看起來很奇怪。第二種解決方案涉及複製報告,這是我試圖避免的問題:)謝謝! – 2008-09-23 02:55:08

1

我已經使用的「第二次報告」主題的一個細微差異是將報告中包含可選列的部分分離到其自己的子報告中,然後創建兩個子報告,一個報告和一個沒有列,然後使用條件確定要打印哪個子報表。

0

檢查THIS在該教程中,他們使用了帶有Velocity框架的XML模板。這非常複雜。爲了使它更簡單,你可以我們DynamicJasper。這個庫是一個開源的Java API,它可以通過JasperReports來解決動態列問題。

1

刪除線的時候空白:此選項帶走,該對象佔用的垂直空間,如果是 不可見;元素的可見性由 「打印時的表達式」屬性中包含的表達式的值確定。將網頁看作網格放置元素, ,其中元素佔據的空間爲線條。圖4-17突出顯示了元素A行;在 爲了真正刪除這一行,共享該行一部分的所有元素必須爲空 (也就是說,它們不會被打印)。

+0

`刪除行時空白' - 問題是如何隱藏列,而不是行 – 2013-08-25 18:55:40

1

我推薦使用DynamicReports,它是開源的,基於JasperReports。 這個庫的主要好處是動態報告設計,不需要可視化報告設計器。

0

我想這個答案來得太晚了,但我添加它的記錄。在我的情況下,我可以解決它沒有任何額外的依賴或工具。在JRXML文件中,我只是多次將textfields寬度添加爲動態寬度。每個可能的寬度就是一次。然後在每個文本框中,我已經設置了它只應在特定條件下打印。

這可能不如動態設置寬度那樣優雅,但它沒有任何麻煩與額外的庫。

3

JasperDesign用於在運行時從代碼中修改模板對象(JasperReport)。我想這可能適合你的情況。

8

在以後的碧玉報告版本(V5或以上),你可以使用jr:table組件和真正實現這一目標(不使用的Java代碼使用動態碧玉或動態報告)。

的方法是使用<printWhenExpression/><jr:column/>

示例數據

+----------------+--------+ 
|  User  | Rep | 
+----------------+--------+ 
| Jon Skeet  | 854503 | 
| Darin Dimitrov | 652133 | 
| BalusC   | 639753 | 
| Hans Passant | 616871 | 
| Me    | 6487 | 
+----------------+--------+ 

樣品JRXML

:參數$P{displayRecordNumber}<printWhenExpression>下第一jr:column

<?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="reputation" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a88bd694-4f90-41fc-84d0-002b90b2d73e"> 
    <style name="table"> 
     <box> 
      <pen lineWidth="1.0" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table_TH" mode="Opaque" backcolor="#F0F8FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table_CH" mode="Opaque" backcolor="#BFE1FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table_TD" mode="Opaque" backcolor="#FFFFFF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <subDataset name="tableDataset" uuid="7a53770f-0350-4a73-bfc1-48a5f6386594"> 
     <field name="User" class="java.lang.String"/> 
     <field name="Rep" class="java.math.BigDecimal"/> 
    </subDataset> 
    <parameter name="displayRecordNumber" class="java.lang.Boolean"> 
     <defaultValueExpression><![CDATA[true]]></defaultValueExpression> 
    </parameter> 
    <queryString> 
     <![CDATA[]]> 
    </queryString> 
    <title> 
     <band height="50"> 
      <componentElement> 
       <reportElement key="table" style="table" x="0" y="0" width="555" height="47" uuid="76ab08c6-e757-4785-a43d-b65ad4ab1dd5"/> 
       <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> 
        <datasetRun subDataset="tableDataset" uuid="07e5f1c2-af7f-4373-b653-c127c47c9fa4"> 
         <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression> 
        </datasetRun> 
        <jr:column width="90" uuid="918270fe-25c8-4a9b-a872-91299cddbc31"> 
         <printWhenExpression><![CDATA[$P{displayRecordNumber}]]></printWhenExpression> 
         <jr:columnHeader style="table_CH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="90" height="30" uuid="5cd6da41-01d5-4f74-99c2-06784f891d1e"/> 
           <textElement textAlignment="Center" verticalAlignment="Middle"/> 
           <text><![CDATA[Record number]]></text> 
          </staticText> 
         </jr:columnHeader> 
         <jr:detailCell style="table_TD" height="30" rowSpan="1"> 
          <textField> 
           <reportElement x="0" y="0" width="90" height="30" uuid="5fe48359-0e7e-44b2-93ac-f55404189832"/> 
           <textElement textAlignment="Center" verticalAlignment="Middle"/> 
           <textFieldExpression><![CDATA[$V{REPORT_COUNT}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="90" uuid="7979d8a2-4e3c-42a7-9ff9-86f8e0b164bc"> 
         <jr:columnHeader style="table_CH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="90" height="30" uuid="61d5f1b6-7677-4511-a10c-1fb8a56a4b2a"/> 
           <textElement textAlignment="Center" verticalAlignment="Middle"/> 
           <text><![CDATA[Username]]></text> 
          </staticText> 
         </jr:columnHeader> 
         <jr:detailCell style="table_TD" height="30" rowSpan="1"> 
          <textField> 
           <reportElement x="0" y="0" width="90" height="30" uuid="a3cdb99d-3bf6-4c66-b50c-259b9aabfaef"/> 
           <box leftPadding="3" rightPadding="3"/> 
           <textElement verticalAlignment="Middle"/> 
           <textFieldExpression><![CDATA[$F{User}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="90" uuid="625e4e5e-5057-4eab-b4a9-c5b22844d25c"> 
         <jr:columnHeader style="table_CH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="90" height="30" uuid="e1c07cb8-a44c-4a8d-8566-5c86d6671282"/> 
           <textElement textAlignment="Center" verticalAlignment="Middle"/> 
           <text><![CDATA[Reputation]]></text> 
          </staticText> 
         </jr:columnHeader> 
         <jr:detailCell style="table_TD" height="30" rowSpan="1"> 
          <textField pattern="#,##0"> 
           <reportElement x="0" y="0" width="90" height="30" uuid="6be2d79f-be82-4c7b-afd9-0039fb8b3189"/> 
           <box leftPadding="3" rightPadding="3"/> 
           <textElement textAlignment="Right" verticalAlignment="Middle"/> 
           <textFieldExpression><![CDATA[$F{Rep}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
       </jr:table> 
      </componentElement> 
     </band> 
    </title> 
</jasperReport> 

輸出與$ P {displayRecordNumber} =真

true

輸出與$ P {displayRecordNumber} = FALSE

false

正如您所看到的那樣,列在適當的基礎上顯示適應。

+0

這是一個視頻教程,通過類似的方法:https://www.youtube.com/watch?v=Bmrqo9fDkOs – Kamal 2018-03-08 23:39:43

相關問題