我有一個帶折線圖的JasperReport,我需要顯示標籤,但我希望它們有條件地顯示每個數據點。我創建了自定義器類來實際顯示值,但我想使用與值字段不同的字段來決定是否顯示該值。JasperReports基於類別值以外的值自定義系列標籤
基本上在我的數據集我有3個領域:
Date: (Category Axis)
Value: (Value Axis)
PrintValue: Boolean field
我想打印在標籤中的價值,只有當PRINTVALUE =真
我有一個帶折線圖的JasperReport,我需要顯示標籤,但我希望它們有條件地顯示每個數據點。我創建了自定義器類來實際顯示值,但我想使用與值字段不同的字段來決定是否顯示該值。JasperReports基於類別值以外的值自定義系列標籤
基本上在我的數據集我有3個領域:
Date: (Category Axis)
Value: (Value Axis)
PrintValue: Boolean field
我想打印在標籤中的價值,只有當PRINTVALUE =真
一個解決辦法是重寫通過實施的方法之一在Scriptlet類中使用JRDefaultScriptlet,然後以任何您想要的方式設置「PrintValue」的值。然後在你的圖表數據集中,你應該能夠引用$V{PRINTVALUE}
作爲操作數。
我將假設您使用iReport進行報表設計。
打開您iReport的報告,然後點擊報告名稱(在報告檢查最上面的節點)
設置Scriplet類的包名和類,比如,org.company.scriptlets。 MyChartClass
在iReport中聲明您的報告變量。在這種情況下,「PRINTVALUE」將是變量名稱。
創建一個Java類,它覆蓋一個scriplet方法,像beforeDetailEval,例如,:
@Override
public void beforeDetailEval() throws JRScriptletException {
super.beforeDetailEval();
...
this.setVariableValue("PRINTVALUE", true);
}
既然你要有條件地顯示類別標籤爲每個刻度線,你可能需要使用鍵/ val對的映射。鍵將是類別標籤,對於「PRINTVALUE」,值將是真/假。注意我沒有在上面的示例代碼中說明這一點,但它完全可能。只需將您的報告變量聲明爲Map即可,例如HashMap<String, Boolean> hm
。
您需要將新的scriplet類添加到iReport中的Classpath。
希望這有助於或至少讓你開始。