【发布时间】:2013-08-28 17:51:18
【问题描述】:
我是 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 文件中。
【问题讨论】:
标签: java jasper-reports