2012-06-29 20 views
1

我有一個帶折線圖的JasperReport,我需要顯示標籤,但我希望它們有條件地顯示每個數據點。我創建了自定義器類來實際顯示值,但我想使用與值字段不同的字段來決定是否顯示該值。JasperReports基於類別值以外的值自定義系列標籤

基本上在我的數據集我有3個領域:

Date: (Category Axis) 
Value: (Value Axis) 
PrintValue: Boolean field 

我想打印在標籤中的價值,只有當PRINTVALUE =真

回答

0

一個解決辦法是重寫通過實施的方法之一在Scriptlet類中使用JRDefaultScriptlet,然後以任何您想要的方式設置「PrintValue」的值。然後在你的圖表數據集中,你應該能夠引用$V{PRINTVALUE}作爲操作數。

我將假設您使用iReport進行報表設計。

  1. 打開您iReport的報告,然後點擊報告名稱(在報告檢查最上面的節點)

  2. 設置Scriplet類的包名和類,比如,org.company.scriptlets。 MyChartClass

  3. 在iReport中聲明您的報告變量。在這種情況下,「PRINTVALUE」將是變量名稱。

  4. 創建一個Java類,它覆蓋一個scriplet方法,像beforeDetailEval,例如,:

    @Override 
    public void beforeDetailEval() throws JRScriptletException { 
         super.beforeDetailEval(); 
         ... 
         this.setVariableValue("PRINTVALUE", true); 
    } 
    

    既然你要有條件地顯示類別標籤爲每個刻度線,你可能需要使用鍵/ val對的映射。鍵將是類別標籤,對於「PRINTVALUE」,值將是真/假。注意我沒有在上面的示例代碼中說明這一點,但它完全可能。只需將您的報告變量聲明爲Map即可,例如HashMap<String, Boolean> hm

  5. 您需要將新的scriplet類添加到iReport中的Classpath。

希望這有助於或至少讓你開始。