如何在Jasper报告中动态显示列?

时间:2012-06-02 14:30:59

标签: java jasper-reports conditional-statements

我正在生成一个Jasper报告,它有5个固定列。客户端已请求能够在运行时选择列数。

例如,如果他从显示的JTable中检查2列,则Jasper报告中应该有2列,如果他检查4,那么jasper报告中应该有4列。为了解决这个问题,我想在jasper报告中添加条件。如果客户端选择A列和B列,我会将其设置为报表中的参数,并使用它来确定是否显示列。

为了做到这些,我需要使用Jasper XML中的条件。我应该在哪里设置报告中的条件。

3 个答案:

答案 0 :(得分:3)

您可以尝试以下

  1. 创建HashMap并在其中设置所需的属性

    Map params = new HashMap();
    params.put("DISPLAY_COLUMN_ONE", "Y")
    
  2. 在方法

    中将此params地图传递给Jasper

    JasperFillManager.fillReport

  3. 在JRXML中,创建与每个属性集对应的参数 在上面的hashmap中:

    <parameter name="DISPLAY_COLUMN_ONE" class="java.lang.String"/>

  4. 根据参数值

    显示列

    <printWhenExpression><![CDATA[$P{DISPLAY_COLUMN_ONE}.equals("Y")]]></printWhenExpression>

答案 1 :(得分:2)

您应该将 columnCount 参数传递给jasper并检查每个列的在表达式时打印条件。

第一栏表达时打印

$P{columnCount} >=1

第二栏表达时打印

$P{columnCount} >=2

第三栏表达时打印

$P{columnCount} >=3

第四栏表达时打印

$P{columnCount} >=4

希望这对你有所帮助。

答案 2 :(得分:0)

我只会制作您的碧玉报告的多个副本,每个列的数量变化一个。它可能是很多冗余,但只要可能的变化数量不是太高,它就很容易。您最终调用的报告取决于用户的选择。

我想不出任何基于条件来改变报表中列的方法。