Jasper报告中空字段的默认值

时间:2011-03-07 15:17:28

标签: jasper-reports textfield ireport

背景

ResultSet有许多Double个值字段(模式类似"###0.000")。某些值可以是null

问题

我想将null值替换为"N/A"String并且无法打印到Double字段。打印"0.00" null值是不可接受的。

使用($F{value} != null) ? $F{value} : "N/A"的PrintWhenExpression值不起作用;不可能以这种方式使用模式。

添加写入“N / A”的隐藏字段。仅当值为null时才会打印这些字段。

问题

是否有更好的解决方案,如果是,那又是什么?

谢谢。

2 个答案:

答案 0 :(得分:10)

解决方案#1

您的解决方案:

  1. 使用常规的双字段(doubleField)作为列值。
  2. 在同一位置添加静态字符串文本字段。
  3. 将Double字段更改为空时为空
  4. 将字符串文本字段的 PrintWhenExpression 值设置为:$F{doubleField} == null
  5. 解决方案#2

    问题是,正如您所指出的,Double和String是两种不同的数据类型。您可以使用适当的表达式将String变量分配给Double的值。然后使用String变量作为字段。表达式可能类似于:

    ($F{doubleField} == null) ?
      "N/A" : new java.text.DecimalFormat("#.##").format($F{doubleField})
    

    (注意:我的偏好是使用==代替!=。积极思考。)

    解决方案#3

    更改SQL语句以将Double预格式化为文本字符串,并在字符串中使用“N / A”(在查询中使用CASEDECODE语句)。

    避免使用此解决方案,因为它无法维护。

    建议

    不要在整个报告中硬编码“N / A”字符串;将“N / A”文本放在常量或默认值为“N / A”的参数中。

答案 1 :(得分:0)

您可以在字段表达式中尝试以下操作:

("Your static text "+(($F{field}!=null)?$F{field}:"")) 

或者,如果您不希望在字段为空时看到静态文本,请尝试将$F{field}!=null放在PrintWhenExpression中。