2013-08-28 71 views
0

我是JasperReports,我需要幫助。獲取printWhenExpression中的列標題文本

我們有一個動態獲取列標題和數據的場景。這就像一個常見的組件,它將生成報告,而不管列的數量和列標題以及數據(它們是動態的)。數據(列和數據)與JasperReports的API動態設置的報告中的Java一邊,我們只是在JRXML文件,如下的模板。

<jr:column width="92"> 
    <jr:columnHeader style="table 2_CH" height="25" rowSpan="1"> 
     <staticText> 
      <reportElement x="0" y="0" width="92" height="25" backcolor="#99CCFF"/> 
      <textElement textAlignment="Center" verticalAlignment="Middle"> 
       <font fontName="Arial" size="9" isBold="true"/> 
      </textElement> 
      <text><![CDATA[DYNAMIC_DATA_FIELD]]></text> 
     </staticText> 
    </jr:columnHeader> 
    <jr:detailCell style="table 2_CH" height="25" rowSpan="1"> 
     <textField isBlankWhenNull="true"> 
      <reportElement x="0" y="0" width="92" height="25"/> 
      <textElement textAlignment="Right" verticalAlignment="Middle"> 
       <font fontName="Arial" size="8"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$F{DYNAMIC_DATA_FIELD}]]></textFieldExpression> 
     </textField> 
    </jr:detailCell> 
</jr:column> 

該模板將在爪哇側被獲取並用於在模板DYNAMIC_DATA_FIELD值將與列標題文本,並根據在查詢的結果的數據的索引被替換。

現在我需要根據UI中單選按鈕的選擇來隱藏和顯示幾列。爲此,我打算使用printWhenExpression但不知道如何獲取列標題文本。我看到類似$P{JASPER_REPORT}.getColumnHeader()但不知道如何使用它。因此,這裏是我想要使用的條件(以下只是一個模板,我不知道正確的語法)...

if (radioSelection == something) { 
    if (columnHeaderText.endsWith('something') { 
     return true; 
    } else { 
     return false; 
    } 
} 

請注意,我將無法使用此條件在Java代碼作爲一個共同的組件,所有的報告使用它。由於每個報告在我們的場景中都有一個jrxml文件,並且這僅出現在特定報告中,因此我試圖將條件放在jrxml文件中。

回答

0

你可以使用布爾[]數組的值爲每列(顯示與否)? 在這種情況下,您的貓將它的數組傳遞給report.jrxml作爲參數(例如,$ P {displayCols})。

在表組「列打印時」表達爲$ P {displayCols [number_of_column]} 凡列的數目是形而下位(1或2或3,...)

但在這種情況下,必須改變「一代」jrxml?並且在這種情況下列標題文本不需要