我是 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 文件中。
答案 0 :(得分:0)
你能为每个列创建带有值的boolean []数组(是否显示)? 在这种情况下,你将它的数组传递给report.jrxml作为参数(例如$ P {displayCols})。
在表格集中“列打印时”表达式为$ P {displayCols [number_of_column]} 列数为concret数字(1或2或3 ......)
但是在这种情况下你必须改变“生成”jrxml?在这种情况下,不需要列标题文本