【问题标题】:How to dynamically show columns in a Jasper Report?如何在 Jasper 报告中动态显示列?
【发布时间】:2012-06-07 10:52:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: java jasper-reports conditional-statements


    【解决方案1】:

    你可以试试下面的

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

      Map params = new HashMap();
      params.put("DISPLAY_COLUMN_ONE", "Y")
      
    2. 将此params 映射传递给方法中的Jasper

      JasperFillManager.fillReport

    3. 在您的 JRXML 中,创建一个与每个属性集对应的参数 在上面的哈希图中:

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

    4. 根据参数值显示列

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

    【讨论】:

    • 你能证明一下语法吗
    【解决方案2】:

    您应该将 columnCount 参数传递给 jasper,并检查每一列的 Print when Expression 中的条件。

    第一列当表达式

    时打印
    $P{columnCount} >=1
    

    第二列当表达式

    时打印
    $P{columnCount} >=2
    

    第三列当表达式

    时打印
    $P{columnCount} >=3
    

    第四列当表达式

    时打印
    $P{columnCount} >=4
    

    希望对您有所帮助。

    【讨论】:

    • 请证明print when expression的语法
    【解决方案3】:

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

    我想不出任何方法可以根据条件改变报告中的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多