JasperReports交叉表中行标题的动态样式

时间:2012-02-07 07:31:35

标签: jasper-reports crosstab

我正在尝试使用JasperReports生成交叉表报告。该列包含时间段,该行包含不同的条件组。现在我需要根据级别更改行标题的样式。例如,在下面显示的网格中,Web和电子邮件需要以粗体显示,而其他行标题则按原样。

enter image description here

现在,我在bean中有一个字段让我决定是否应该使文本变粗,所以我尝试在条件样式中使用它,如下所示

<style name="rowStyle" hAlign="Center">
   <conditionalStyle>
      <conditionExpression><![CDATA[$V{level}.intValue() != 0]]></conditionExpression>
         <style isBold="true" hAlign="Left"/>
   </conditionalStyle>
   <conditionalStyle>
      <conditionExpression><![CDATA[$V{level}.intValue() == 0]]></conditionExpression>
         <style isBold="false" hAlign="Right"/>
   </conditionalStyle>
</style>

我有一个字段和一个与此对应的度量表达式

<field name="level" class="java.lang.Integer"/>

<measure name="level" class="java.lang.Integer">
   <measureExpression><![CDATA[$F{level}]]></measureExpression>
</measure>

但是,在crosstabRowHeader中使用时,此样式不会执行任何操作,它仅在crosstabCell内生效。 所以我的问题是

  • 无论如何我在crosstabRowHeader中使用条件样式?
  • 更具体地说,我可以访问crosstabRowHeader中的任何bean属性吗?

1 个答案:

答案 0 :(得分:0)

毕竟管理好了解决这个问题。 所以问题是能够从crosstabrowheader(或任何其他交叉表标题)中的bean访问属性。 要做到这一点,首先要创建一个与bean对应的字段 -

<field name="voBean" class="com.jasper.reports.voBean"> <fieldDescription>_THIS</fieldDescription> </field>

然后在标题中,将此bean指定为存储桶类。

<rowGroup name="voBean" width="200"> <bucket class="com.jasper.reports.voBean"> <bucketExpression><![CDATA[$F{voBean}]]></bucketExpression> </bucket>

您现在可以开始访问bean上的任何属性,如下所示

<textFieldExpression><![CDATA[$V{voBean}.getRowName()]]></textFieldExpression>

希望这可以帮助其他人解决同样的问题。