java iReport:如何在没有数据行的文本字段中隐藏包含不同类型数据的行
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10117478/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
iReport: How to hide line with text fields without data line contains different kind of data
提问by Sweety
I have null textfields (it contains string or bigdecimal value) put on single line pulled for my report which display a blank line.
我将空文本字段(它包含字符串或 bigdecimal 值)放在为我的报告拉出的单行上,其中显示一个空行。
In order to remove the blank line that has null rows I used the property isRemoveLineWhenBlank
for the report elements in that line. But that does not work.
为了删除具有空行的空行,我使用了isRemoveLineWhenBlank
该行中报表元素的属性。但这不起作用。
Can someone help me with this please?
有人可以帮我吗?
snap:
折断:
output snap:
输出快照:
jrxml :
jrxml :
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
name="WEB_PREVIEW"
columnCount="1"
printOrder="Horizontal"
orientation="Portrait"
pageWidth="595"
pageHeight="900"
columnWidth="535"
columnSpacing="0"
leftMargin="30"
rightMargin="30"
topMargin="20"
bottomMargin="20"
whenNoDataType="NoPages"
isTitleNewPage="false"
isSummaryNewPage="false">
<property name="ireport.scriptlethandling" value="0" />
<property name="ireport.encoding" value="UTF-8" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
<parameter name="GROSS_RENTAL_INCOME_SQPA_LABEL" isForPrompting="false" class="java.lang.String"/>
<parameter name="GROSS_RENTAL_INCOME_SQPA" isForPrompting="false" class="java.math.BigDecimal"/>
<defaultValueExpression ><![CDATA["C:\Development_New\Cyprus\Cyprus\WebRoot\report\"]]></defaultValueExpression>
</parameter>
<background>
<band height="0" isSplitAllowed="true" >
</band>
</background>
<title>
<band height="0" isSplitAllowed="true" >
</band>
</title>
<pageHeader>
<band height="32" isSplitAllowed="true" >
<textField isStretchWithOverflow="true" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="367"
y="105"
width="96"
height="12"
key="textField"
positionType="Float"
isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[new Boolean($P{GROSS_RENTAL_INCOME_SQPA}!=null)]]></printWhenExpression>
</reportElement>
<box></box>
<textElement>
<font pdfFontName="Helvetica-Bold" size="8" isBold="true"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$P{GROSS_RENTAL_INCOME_SQPA_LABEL}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="###,##0.00" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="472"
y="105"
width="48"
height="12"
key="textField"
positionType="Float"
isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[new Boolean($P{GROSS_RENTAL_INCOME_SQPA}!=null)]]></printWhenExpression>
</reportElement>
<box></box>
<textElement>
<font size="8"/>
</textElement>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$P{GROSS_RENTAL_INCOME_SQPA}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="0" isSplitAllowed="true" >
</band>
</columnFooter>
<pageFooter>
<band height="0" isSplitAllowed="true" >
</band>
</pageFooter>
<summary>
<band height="0" isSplitAllowed="true" >
</band>
</summary>
</jasperReport>
采纳答案by Alex K
You can play the sample below to achieve the result you want.
您可以播放下面的示例以达到您想要的效果。
It's demonstrates how to hide the row with two textFieldelements (two columns) with help of frameelements (of course in cooperation with using isRemoveLineWhenBlankproperty as said in the question).
它演示了如何在框架元素的帮助下使用两个textField元素(两列)隐藏行(当然与问题中所述的使用isRemoveLineWhenBlank属性合作)。
The jrxmlfile code:
该JRXML文件的代码:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ... pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="0" bottomMargin="0">
<parameter name="par1" class="java.lang.String">
<defaultValueExpression><![CDATA[null]]></defaultValueExpression>
</parameter>
<parameter name="par2" class="java.lang.String">
<defaultValueExpression><![CDATA[null]]></defaultValueExpression>
</parameter>
<parameter name="par3" class="java.lang.String">
<defaultValueExpression><![CDATA[null]]></defaultValueExpression>
</parameter>
<parameter name="par4" class="java.lang.String">
<defaultValueExpression><![CDATA[null]]></defaultValueExpression>
</parameter>
<title>
<band height="139" splitType="Stretch">
<line>
<reportElement x="10" y="61" width="520" height="1"/>
</line>
<line>
<reportElement x="10" y="127" width="520" height="1"/>
</line>
<textField isBlankWhenNull="true">
<reportElement x="10" y="85" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par3} == null ? null : "P3: " + $P{par3}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="10" y="65" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par1} == null ? null : "P1: " + $P{par1}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="62" y="65" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par2} == null ? null : "P2: " + $P{par2}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="62" y="85" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par4} == null ? null : "P4: " + $P{par4}]]></textFieldExpression>
</textField>
<frame>
<reportElement x="331" y="65" width="52" height="54"/>
<textField isBlankWhenNull="true">
<reportElement x="0" y="20" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par3} == null ? null : "P3: " + $P{par3}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par1} == null ? null : "P1: " + $P{par1}]]></textFieldExpression>
</textField>
</frame>
<frame>
<reportElement x="383" y="65" width="52" height="54"/>
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par2} == null ? null : "P2: " + $P{par2}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement x="0" y="20" width="52" height="20" isRemoveLineWhenBlank="true"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$P{par4} == null ? null : "P4: " + $P{par4}]]></textFieldExpression>
</textField>
</frame>
<textField isStretchWithOverflow="true">
<reportElement x="16" y="0" width="115" height="51"/>
<box topPadding="10" leftPadding="10" bottomPadding="10" rightPadding="10"/>
<textElement>
<font isBold="true" isItalic="true"/>
</textElement>
<textFieldExpression><![CDATA["P1: " + $P{par1} + "\nP2: " + $P{par2} + "\nP3: " + $P{par3} + "\nP4: " + $P{par4}]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
The report's design in iReport:
iReport 中的报告设计:
The result for hiding the whole line:
隐藏整行的结果:
The result for hiding the only one field in first column, first row:
隐藏第一列第一行中唯一一个字段的结果:
回答by Alexander Apel
the solution are not frames.
解决方案不是框架。
Add a printWhenExpression to the textfield:
将 printWhenExpression 添加到文本字段:
<printWhenExpression><![CDATA[$P{par1}!=null]]></printWhenExpression></reportElement>
sample:
样本:
<textField isBlankWhenNull="true">
<reportElement x="719" y="0" width="52" height="11">
<printWhenExpression><![CDATA[$P{par1}!=null]]></printWhenExpression>
</reportElement>
<box>
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement />
<textFieldExpression><![CDATA[$P{par1}]]></textFieldExpression>