我是JasperReports的新手,需要帮助。
我们有一个动态获取列标题和数据的场景。这就像一个通用组件,它将生成报告,而与列数以及列标题和数据(它们是动态的)无关。数据(列和数据)使用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>
此模板将在Java端获取,模板中DYNAMIC_DATA_FIELD的值将替换为列标题文本和数据索引,具体取决于查询结果。
现在我需要根据 UI 中单选按钮的选择隐藏和显示几列。为此,我打算使用printWhenExpression
但不确定如何获取列标题文本。我看到了类似$P{JASPER_REPORT}.getColumnHeader()
但不知道如何使用它的东西。所以这是我试图使用的条件(下面只是一个模板,我不确定正确的语法)......
if (radioSelection == something) {
if (columnHeaderText.endsWith('something') {
return true;
} else {
return false;
}
}
请注意,我将无法在Java代码中将此条件用作其通用组件,并且所有报告都使用此条件。由于在我们的场景中每个报告都有一个jrxml文件,并且这只发生在特定报告中,因此我试图将条件放在jrxml文件中。