Jasper报告中空字段的默认值

jir*_*iya 6 jasper-reports ireport textfield

背景

ResultSet有许多Double值字段(具有类似的模式"###0.000").有些值可以null.

问题

我想替换null"N/A",这是一个String,不能打印到Double字段.打印"0.00"null值是不可接受的.

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

理念

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

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

谢谢.

Dav*_*vis 10

解决方案#1

你的解决方案

  1. 使用常规的Double字段(doubleField)作为列值.
  2. 在同一位置添加静态字符串文本字段.
  3. Null时将Double字段更改为Blank.
  4. 将String文本字段的PrintWhenExpression值设置为:$F{doubleField} == null.

解决方案#2

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

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

(注意:我的偏好是使用==而不是!=.积极思考.)

解决方案#3

更改SQL语句以将Double预格式化为文本字符串,并在字符串中使用"N/A"(通过在查询中使用CASEor DECODE语句).

但是,请避免使用此解决方案,因为它无法维护.

建议

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