Jump to content
We've recently updated our Privacy Statement, available here ×

removing crosstab column groups


bogdangh

Recommended Posts

Hi,

if the report has multiple column groups, can some of them be hidden/collapsed with printWhenExpression and removeLineWhenBlank (or any other solution) ? I want to remove/collapse the entire column group if there are no values to show. The code i used:

Code:

<?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="aaa"
columnCount="1"
printOrder="Vertical"
orientation="Portrait"
pageWidth="800"
pageHeight="1000"
columnWidth="740"
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.*" />


<field name="commodity" class="java.lang.String"/>
<field name="company" class="java.lang.String"/>
<field name="deliv" class="java.lang.String"/>
<field name="pht" class="java.lang.String"/>
<field name="value" class="java.lang.Double"/>

<background>
<band height="0" isSplitAllowed="true" >
</band>
</background>
<title>
<band height="0" isSplitAllowed="true" >
</band>
</title>
<pageHeader>
<band height="0" isSplitAllowed="true" >
</band>
</pageHeader>
<columnHeader>
<band height="0" isSplitAllowed="true" >
</band>
</columnHeader>
<detail>
<band height="0" isSplitAllowed="true" >
</band>
</detail>
<columnFooter>
<band height="0" isSplitAllowed="true" >
</band>
</columnFooter>
<pageFooter>
<band height="0" isSplitAllowed="true" >
</band>
</pageFooter>
<summary>
<band height="700" isSplitAllowed="true" >
<crosstab >
<reportElement
x="14"
y="20"
width="702"
height="660"
key="crosstab-1"/>
<crosstabHeaderCell> <cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabHeaderCell> <rowGroup name="company" width="100">
<bucket>
<bucketExpression class="java.lang.String"><![CDATA[$F{company}]]></bucketExpression>
</bucket>
<crosstabRowHeader>
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="1Point" rightBorderColor="#000000" bottomBorder="1Point" bottomBorderColor="#000000"/>
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="0"
y="0"
width="100"
height="30"
key="textField"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$V{company}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabRowHeader>
</rowGroup>
<rowGroup name="deliv" width="100">
<bucket>
<bucketExpression class="java.lang.String"><![CDATA[$F{deliv}]]></bucketExpression>
</bucket>
<crosstabRowHeader>
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="0"
y="0"
width="100"
height="30"
key="textField"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$V{deliv}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabRowHeader>
</rowGroup>
<columnGroup name="commodity" height="25" headerPosition="Center">
<bucket>
<bucketExpression class="java.lang.String"><![CDATA[$F{commodity}]]></bucketExpression>
</bucket>
<crosstabColumnHeader>
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textField isStretchWithOverflow="false" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="0"
y="0"
width="50"
height="25"
key="textField"
isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[new Boolean($V{commodity} != null)]]></printWhenExpression>
</reportElement>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$V{commodity}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabColumnHeader>
</columnGroup>
<columnGroup name="pht" height="25" headerPosition="Center">
<bucket>
<bucketExpression class="java.lang.String"><![CDATA[$F{pht}]]></bucketExpression>
</bucket>
<crosstabColumnHeader>
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textField isStretchWithOverflow="false" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="0"
y="0"
width="50"
height="25"
key="textField"
isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[new Boolean($V{pht} != null)]]></printWhenExpression>
</reportElement>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$V{pht}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabColumnHeader>
</columnGroup>

<measure name="value_Nothing" class="java.lang.Double">
<measureExpression><![CDATA[$F{value}]]></measureExpression>
</measure>
<crosstabCell width="50" height="30">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="0"
y="0"
width="50"
height="30"
key="textField"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font/>
</textElement>
<textFieldExpression class="java.lang.Double"><![CDATA[$V{value_Nothing}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
<crosstabCell width="0" height="30" columnTotalGroup="pht">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<crosstabCell width="0" height="30" columnTotalGroup="commodity">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<crosstabCell width="50" height="0" rowTotalGroup="deliv">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<crosstabCell width="0" height="0" rowTotalGroup="deliv" columnTotalGroup="pht">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<crosstabCell width="0" height="0" rowTotalGroup="deliv" columnTotalGroup="commodity">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<crosstabCell width="50" height="0" rowTotalGroup="company">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<crosstabCell width="0" height="0" rowTotalGroup="company" columnTotalGroup="pht">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<crosstabCell width="0" height="0" rowTotalGroup="company" columnTotalGroup="commodity">
<cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</crosstabCell>
<whenNoDataCell> <cellContents mode="Transparent">
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
</cellContents>
</whenNoDataCell> </crosstab>
</band>
</summary>
</jasperReport>

 

But instead of removing the entire column group, the group is shown with no values inside.

 

This is quite important so any help will be greatly appreciated.

Link to comment
Share on other sites

  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Unfortunately it doesn't work like this (as you already observed empirically). The crosstab renderer does not shrink/collapse a cell when its contents does not print (actually the logic would be to shrink/collapse an entire row when no content prints in any of the cells on that row).

 

I'm afraid there is no other way to achieve such functionality. You can post it as a feature request here if you think it would be useful for others as well and if you have a clear case about how such a feature would work.

 

If you would be able to decide before filling the report whether a column group needs to be hidden, you could try to alter the report design by removing the column group, and then recompile the design and fill the report.

 

Regards,

Lucian

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...