获取printWhenExpression中的列标题文本

时间:2013-08-28 08:37:33

标签: java jasper-reports

我是 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 文件中。

1 个答案:

答案 0 :(得分:0)

你能为每个列创建带有值的boolean []数组(是否显示)? 在这种情况下,你将它的数组传递给report.jrxml作为参数(例如$ P {displayCols})。

在表格集中“列打印时”表达式为$ P {displayCols [number_of_column]} 列数为concret数字(1或2或3 ......)

但是在这种情况下你必须改变“生成”jrxml?在这种情况下,不需要列标题文本