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个解决方案进行了很好的解释。