【问题标题】:Default value for null fields in a Jasper ReportJasper 报告中空字段的默认值
【发布时间】:2011-03-07 15:17:27
【问题描述】:

背景

一个 ResultSet 有许多 Double 值字段(具有像 "###0.000" 这样的模式)。一些值可以是null

问题

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

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

想法

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

问题

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

谢谢。

【问题讨论】:

    标签: jasper-reports textfield ireport


    【解决方案1】:

    解决方案 #1

    您的解决方案:

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

    解决方案 #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”的参数中。

    【讨论】:

    • 感谢您的回复。我意识到可以编写如下表达式: $F{value} != null ? String.format("%.3f", $F{value}) : "N/A"(或“N/A”的常量)
    • 我还看到可以使用 java.text.DecimalFormat。非常感谢解释清楚的 3 个解决方案。
    【解决方案2】:

    你可以在你的字段表达式中尝试这样的事情:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多