【问题标题】:Using variables in Conditional Style在条件样式中使用变量
【发布时间】:2012-09-04 18:59:27
【问题描述】:

我有一个 Title 带,其中有一个 Text Field 包含计算的 Variable $V{avg_perc}Text FieldevaluationTime 设置为 Report,与 Variables resetType 相同. 现在我正在尝试使用 Conditional Style 设置此字段的背景颜色,但我不断收到一条错误消息,内容如下:

Invalid expression: !Double.isNaN($V{avg_perc}) && $V{avg_perc} >= 0.8

我在 Column Footer 中使用相同的 条件样式 做完全相同的事情,即使我设置了 evaluationTime,它也可以正常工作 也为该字段报告

删除!Double.isNaN($V{avg_perc}) 后,我不再收到错误消息,但表达式仍然不起作用。当没有任何条件有效时,无论$V{avg_perc} 具有哪个值,我的字段都保持红色,这是基本颜色。不过,它仍然可以在 Column Footer 中使用。这是我的风格:

<style name="avg_color" mode="Opaque" backcolor="#FF0000" pdfFontName="Helvetica-Bold">
    <conditionalStyle>
        <conditionExpression><![CDATA[$V{avg_perc} >= 0.8]]></conditionExpression>
        <style backcolor="#008000"/>
    </conditionalStyle>
    <conditionalStyle>
        <conditionExpression><![CDATA[$V{avg_perc} >= 0.6 && $V{avg_perc} < 0.8]]></conditionExpression>
        <style backcolor="#FFCC00"/>
    </conditionalStyle>
</style>

为此使用的字段和变量:

<field name="perc" class="java.lang.Double"/>
<variable name="avg_perc" class="java.lang.Double" calculation="Average">
    <variableExpression><![CDATA[$F{perc}]]></variableExpression>
</variable>

知道如何让这个东西工作吗?我在 3.7.4 版本中使用 JasperReportsiReport

【问题讨论】:

  • 这个属性的iReport设置是什么:org.eclipse.jdt.core.compiler.sourceorg.eclipse.jdt.core.compiler.complianceorg.eclipse.jdt.core.compiler.codegen.TargetPlatform?
  • 你能发布 avg_perc 变量定义吗?顺便说一句,表达式 !Double.isNaN($F{avg_perc}) &amp;&amp; $F{avg_perc} &gt;= 0.8 对我有用 - 我已经更改了字段上的变量。
  • 我在我的问题中添加了字段和变量定义。
  • 恕我直言,conditionalStyle 中的表达式的工作方式类似于 evaluationTime 的值等于 现在。您可以通过简单的测试来检查这一点 - 您可以添加两个 fields&lt;textFieldExpression class="java.lang.Double"&gt;&lt;![CDATA[$V{avg_perc}]]&gt;&lt;/textFieldExpression&gt; 以及 的不同值(NowReportevaluationTime 属性
  • 对于 Title 乐队来说似乎是正确的。我尝试将 avg_perc 设置为 0.9 的固定值,并将 resetType 设置为 None 并且不管哪个 evaluationTime 为字段设置。将字段的 evaluationTime 设置为 Now 并将计算变量作为值会导致其输出为 null (这是我在stackoverflow.com/questions/12259979/… 中的问题) 并且其颜色为红色。我希望我能以某种方式让它工作,我真的不想在 Java 中预先计算平均值。

标签: jasper-reports ireport


【解决方案1】:

我终于找到了解决问题的方法。添加

<property name="net.sf.jasperreports.style.evaluation.time.enabled" value="true"/>

在报告级别会导致在评估元素时执行条件样式。 有关详细信息,请参阅 Jaspersoft 社区中的 this answer

【讨论】:

    【解决方案2】:

    在您看来 ireport 设计器。

    单击字段并在属性面板中。:标记 = 选定样式

    右键单击该字段。编辑表达式:

    ($F{fila1}.equals("c") ? "<style forecolor='red'>"+ $F{fila1}+"</style>" : $F{fila1})
    

    或xml

    <textFieldExpression><![CDATA[($F{fila1}.equals("c") ? "<style forecolor='red'>"+ $F{fila1}+"</style>" : $F{fila1})]]></textFieldExpression>
    

    【讨论】:

      【解决方案3】:

      根据您的要求修改此代码

      <style name="alternateStyle" fontName="Arial">
          <conditionalStyle>
              <conditionExpression><![CDATA[new Boolean($V{AMOUNT}.intValue() == 0)]]></conditionExpression>
              <style mode="Opaque" backcolor="#FF0000" isBold="true"/>
          </conditionalStyle>
      </style>
      

      也可以参考这个链接:Link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 2019-10-20
        • 2022-10-21
        • 2020-12-03
        • 2015-09-27
        • 1970-01-01
        • 2020-04-15
        相关资源
        最近更新 更多