我正在生成一个 Jasper 报告,它有 5 个固定列。客户要求能够在运行时选择列数。
例如,如果他从显示的 JTable 中检查 2 列,那么 Jasper 报告中应该有 2 列,如果他检查 4,那么 jasper 报告中应该有 4 列。为了解决这个问题,我正在考虑在碧玉报告中添加条件。如果客户选择 A 列,BI 会将其设置为报表中的参数,并使用它来确定是否显示该列。
为了做到这些,我需要在 Jasper XML 中使用条件。我应该在哪里设置报告中的条件。
我正在生成一个 Jasper 报告,它有 5 个固定列。客户要求能够在运行时选择列数。
例如,如果他从显示的 JTable 中检查 2 列,那么 Jasper 报告中应该有 2 列,如果他检查 4,那么 jasper 报告中应该有 4 列。为了解决这个问题,我正在考虑在碧玉报告中添加条件。如果客户选择 A 列,BI 会将其设置为报表中的参数,并使用它来确定是否显示该列。
为了做到这些,我需要在 Jasper XML 中使用条件。我应该在哪里设置报告中的条件。
您可以尝试以下方法
创建一个HashMap
并在其中设置所需的属性
Map params = new HashMap(); params.put("DISPLAY_COLUMN_ONE", "Y")
在方法中将此params
映射传递给 Jasper
JasperFillManager.fillReport
在您的 JRXML 中,创建与上面哈希图中的每个属性集对应的参数:
<parameter name="DISPLAY_COLUMN_ONE" class="java.lang.String"/>
根据参数值显示列
<printWhenExpression><![CDATA[$P{DISPLAY_COLUMN_ONE}.equals("Y")]]></printWhenExpression>
您应该将columnCount参数传递给 jasper 并在 Expression 时检查每列的 Print中的条件。
当表达式为时,第一列打印
$P{columnCount} >=1
当表达式为时,第二列打印
$P{columnCount} >=2
表达式为时的第三列打印
$P{columnCount} >=3
第四列Print when Expression is
$P{columnCount} >=4
希望这对您有所帮助。
我只会制作您的碧玉报告的多份副本,每个列数的变化各一份。这可能有很多冗余,但只要可能的变化数量不太高,它就很容易。您最终调用的报告取决于用户的选择。
我想不出任何方法可以根据条件改变报告中的列。