2010-07-05 225 views
23

我在其中有像如何避免碧玉空值报告

$F{address_street1}+" "+$F{address_street2}+ " " +$F{address_state} + " "+$F{address_country}+ " "+$F{address_zip} 

我的问题是,如果任何在此字段为空,我得到空值的表达式的值我的碧玉报表中的字段在其他东西之间like

101 Main St****null****ILUnited States12345 

请注意突出显示的null。有什么办法可以避免吗?

我曾尝试使用布尔表达式检查其中某个特定字段的空值,并将其替换为空白,但似乎不起作用。

回答

36

将属性isBlankWhenNull设置为true。

  • 在iReport中,选中字段时,选中Blank Null复选框。
  • 在碧玉JRXML文件:<textField isBlankWhenNull="true">
+2

它不起作用,因为我的总字段(这是一个以上的单个字段的串联)不是null只是空字段的一部分,这是我想要避免 – 2010-07-06 11:34:27

+4

这个答案涵盖了一个非常常见的问题。但它不包括这里提出的问题。虽然问题中没有足够的信息可以确定,但将报告语言从“Groovy”更改为“Java”可能就足够了。 – mdahlman 2011-11-13 04:54:27

+0

不正确的具体问题!阅读下面的answar https://stackoverflow.com/a/3186360/1241276 – lory105 2018-01-12 12:27:07

27

在表达你被允许使用Java代码。

所以你需要做的是检查字段的值为空如果是然后用空字符串替换它。

$F{address_street1} == null ? "" : $F{address_street1}+ " " + 
$F{address_street2} == null ? "" : $F{address_street2}+ " " + 
$F{address_state} == null ? "" : $F{address_state} + " " + 
$F{address_country} == null ? "" : $F{address_country}+ " " + 
$F{address_zip} == null ? "" : $F{address_zip} 
+2

对于仍在IReport 3.7.4中的任何人来说,这是行不通的。出于某种原因($ F {field} == null?x:y)返回null(在java三元运算符中被转换为false)。 – 2015-07-06 19:11:01

8

@Vash,是的,这是我会做什么,只是我想你可能想要把括号内的每个表达式,每个表达式是相互独立的。像这样:

($F{address_street1} == null ? "" : $F{address_street1}+ " ") + 
($F{address_street2} == null ? "" : $F{address_street2}+ " ") + 
($F{address_state} == null ? "" : $F{address_state} + " ") + 
($F{address_country} == null ? "" : $F{address_country}+ " ") + 
($F{address_zip} == null ? "" : $F{address_zip}) 
+1

我一直在做这个很长一段时间,但我希望有人有一个不太详细的解决方案。 – 2010-10-29 01:10:35

1

我有选项(Blank when Null)检查报表中的每个字段,并仍然在字段中看到空值。所以,我使用了报表表达式。

由于每个报表变量是一个字符串,检查null使用:

$F{address_stree2}.equals("null") 
0

您可以编写Java代码

package com.xyz 

Class ReportUtil 
    { 
     public static String getMyString (String str1 , String str2) 
     { 
      if((str1!=null) && (str2!=null)) 
       return str1 + " " + str2 ; 
      else if str1==null 
        return str2 ; 
      return str1 ;        
      } 

    } 

在JRXML,您可以使用文本框下面的表达式

com.xyx.ReportUtil.getMyString ($F{firstName},$F{lastName}) 

集 “是空当空” 属性设置为true

问候,

Ankush

2
($F{address_street1}.equals(null) ? "" : $F{address_street1}+ " ") + 
($F{address_street2}.equals(null)l ? "" : $F{address_street2}+ " ") + 
($F{address_state}.equals(null) ? "" : $F{address_state} + " ") +    
($F{address_country}.equals(null) ? "" : $F{address_country}+ " ") +   
($F{address_zip} .equals(null) ? "" : $F{address_zip}) 
1

如果你可以使用JasperReports的函数并且要输出字符串值,你可以用函数T()返回文本字符串或做空字符串。

T($ F {的firstName})

-1
($F{address_street1} + " " + $F{address_street2} + " " + $F{address_state} + " " + 
    $F{address_country} + " " + $F{address_zip}).replaceAll("null", "") 
+5

请更好地格式化,并给出解释为什么这是答案。 – 2016-04-06 09:27:38

5

首先解决此问题,检查字段属性空白时的iReport或如果为null复选框它是碧玉JRXML文件:<textField isBlankWhenNull="true">

然后我发现两种方式来解决这个问题。在下面选择一种方式描述。
1.使用表达式语法像这样

$F{variableName}.equals("0")? "" : $F{variableName}

,你可以使用如下代码

$F{address_street1}.equals("0")? "" : $F{address_street1} + " " + 
$F{address_street2}.equals("0")? "" : $F{address_street2} + " " + 
$F{address_state}.equals("0")? "" : $F{address_state} + " " + 
$F{address_country}.equals("0")? "" : $F{address_country} + " " + 
$F{address_zip}.equals("0")? "" : $F{address_zip} 

2.使用表达式语法像

$F{variableName}== null ? "" : $F{variableName}

,您可以使用代码如

$F{address_street1} == null ? "" : $F{address_street1} + " " + 
$F{address_street2} == null ? "" : $F{address_street2} + " " + 
$F{address_state} == null ? "" : $F{address_state} + " " + 
$F{address_country} == null ? "" : $F{address_country} + " " + 
$F{address_zip} == null ? "" : $F{address_zip} 
0

如果您在ecliple +碧玉softReports工作,你只是休闲下面的步骤 1.select场+ 右击并选择showProperties选项 2.click文本字段选择BlankWhenNull 3.Compile并重建检查它。

0

我有我想避免显示输出如果我有空参数
我在表达编辑器中使用T($P{city}),它评估为串类似的情况下,如果您没有参数传递给它

T()返回文本字符串,如果该值是一个字符串,否则将返回一个空字符串

示例用法:

$P{name} + " " + (T($P{city}).isEmpty() ? "" : " from ")+ (T($P{city}).isEmpty() ? "" : "\"" + T($P{city}) + "\"") 

如果我通过参数$ P {城市}
其结果是:从 “利雅”

abdulkahliq

如果我不将参数传递给$ P {city},结果为:

abdulkahliq

感谢和问候,

0

如果您 字段是字符串只需选中上(空白的NULL)的属性。 否则使用三元运算符

if null print else else print the field。

field==null?whatever:field 
field=null?false:true 

这些都应该解决这一问题。

0

尝试以下操作:

$F{address_street1}.toString() == null ? "" : $F{address_street1}+ " " + 
$F{address_street2}.toString() == null ? "" : $F{address_street2}+ " " + 
$F{address_state}.toString() == null ? "" : $F{address_state} + " " + 
$F{address_country}.toString() == null ? "" : $F{address_country}+ " " + 
$F{address_zip}.toString() == null ? "" : $F{address_zip} 

或者 将报表属性: 当资源缺少类型:型空

作品都在我的情况。

0

您可以将文本字段高度设置为1, ,将带有溢出标志的Stretch标志设置为true,将null设置为空白为真,因此当字段值为空时,不会留下空白区域之间的空白。