Jasper reports Jasper报表中空字段的默认值 背景

Jasper reports Jasper报表中空字段的默认值 背景,jasper-reports,textfield,ireport,Jasper Reports,Textfield,Ireport,结果集有许多双值字段(模式类似于“####0.000”)。某些值可以是null 问题 我想将null值替换为“N/A”,这是一个字符串,不能打印到双字段。不能为null值打印“0.00” 是否使用($F{value}!=null)的PrintWheenPression值$F{value}:“不适用”不起作用;以这种方式使用模式是不可能的 主意 添加写入“不适用”的隐藏字段。仅当值为null时,才会打印这些字段 问题: 是否有更好的解决方案,如果有,是什么 谢谢。解决方案#1 您的解决方案: 对列

结果集有许多
值字段(模式类似于
“####0.000”
)。某些值可以是
null

问题 我想将
null
值替换为
“N/A”
,这是一个
字符串,不能打印到双字段。不能为
null
值打印
“0.00”

是否使用
($F{value}!=null)的PrintWheenPression值$F{value}:“不适用”
不起作用;以这种方式使用模式是不可能的

主意 添加写入“不适用”的隐藏字段。仅当值为
null
时,才会打印这些字段

问题: 是否有更好的解决方案,如果有,是什么

谢谢。

解决方案#1 您的解决方案:

  • 对列值使用常规双字段(
    doubleField
  • 在同一位置添加静态字符串文本字段
  • 当为空时,将双字段更改为空白
  • 将字符串文本字段的printweenexpression值设置为:
    $F{doubleField}==null
  • 解决方案#2 正如您所指出的,问题在于Double和String是两种不同的数据类型。可以使用适当的表达式将字符串变量指定给Double的值。然后使用字符串变量作为字段。表达式可能类似于:

    ($F{doubleField} == null) ?
      "N/A" : new java.text.DecimalFormat("#.##").format($F{doubleField})
    
    (注意:我更喜欢使用
    ==
    而不是
    !=
    。积极思考。)

    解决方案#3 将SQL语句更改为将Double预格式化为文本字符串,并在字符串中使用“N/a”(通过在查询中使用
    CASE
    DECODE
    语句)

    但是,请避免使用此解决方案,因为它是不可维护的

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

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

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

    或者,如果您不希望字段为空时静态文本可见,请尝试放置
    $F{field}=在您的
    打印时显示空

    ,谢谢您的回复。我意识到可以编写这样的表达式:$F{value}!=无效的String.format(“%.3f”,$F{value}):“N/A”(或“N/A”的常量),而且我发现可以使用java.text.DecimalFormat。非常感谢您对这3个解决方案进行了很好的解释。