Вы можете сделать это, используя группы данных. Вот пример, как этого добиться:
<queryString language="SQL">
<![CDATA[SELECT col1, col2, col3 FROM some_table ORDER BY flag]]>
</queryString>
<field name="col1" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.label" value="col1"/>
<property name="com.jaspersoft.studio.field.tree.path" value="some_table"/>
</field>
<field name="col2" class="java.lang.String">
<property name="com.jaspersoft.studio.field.label" value="col2"/>
<property name="com.jaspersoft.studio.field.tree.path" value="some_table"/>
</field>
<field name="flag" class="java.lang.Bolean">
<property name="com.jaspersoft.studio.field.label" value="flag"/>
<property name="com.jaspersoft.studio.field.tree.path" value="some_table"/>
</field>
<group name="flagGroup">
<groupExpression><![CDATA[$F{flag}]]></groupExpression>
<groupFooter>
<band height="39">
<printWhenExpression><![CDATA[$F{flag}]]></printWhenExpression>
<staticText>
<reportElement x="0" y="10" width="380" height="20" uuid="d4d760c5-0587-4bd7-973a-de1d9b0c8da6"/>
<text><![CDATA[Any static text to separate groups]]></text>
</staticText>
<line>
<reportElement x="0" y="0" width="330" height="1" uuid="b00741f6-3d2c-4cca-a3fe-397aa7fbf906"/>
</line>
<line>
<reportElement x="0" y="30" width="330" height="1" uuid="0f30d1bc-30ef-48e9-b40e-ab4a3e2b1ffc"/>
</line>
</band>
</groupFooter>
</group>
Он будет группировать строки, используя поле flag
, и вы можете вставить то, что вы хотите в groupFooter
, например, staticText
, line
, rectangle
и т. Д.
Вот предварительный просмотр:
Более подробную информацию о группах вы можете найти на JasperSoft Wiki: https://community.jaspersoft.com/wiki/groups
Обновление: В случае использования subDataset
и jr:table
это аналогично. Сначала определите group
в subDataSet
:
<subDataset name="Dataset1" uuid="bb794b3a-5505-492a-8b9f-500b274a8334">
<field name="col1" class="java.lang.Integer">
<fieldDescription><![CDATA[col1]]></fieldDescription>
</field>
<field name="col2" class="java.lang.String">
<fieldDescription><![CDATA[col2]]></fieldDescription>
</field>
<field name="col3" class="java.lang.String">
<fieldDescription><![CDATA[col3]]></fieldDescription>
</field>
<field name="flag" class="java.lang.Boolean">
<fieldDescription><![CDATA[flag]]></fieldDescription>
</field>
<group name="flagGroup">
<groupExpression><![CDATA[$F{flag}]]></groupExpression>
</group>
</subDataset>
А затем добавить определение нижнего колонтитула (или заголовка) группы в jr:columnGroup
из jr:table
:
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="Dataset1" uuid="0e226f43-fb2c-43df-baa8-4cf91b3e0523">
<datasetParameter name="REPORT_DATA_SOURCE">
<datasetParameterExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{reportData})]]></datasetParameterExpression>
</datasetParameter>
</datasetRun>
<jr:columnGroup width="210" uuid="1b2e36c1-0c14-48a0-97b8-66fa4330a71a">
<jr:groupFooter groupName="flagGroup">
<jr:cell style="Table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="210" height="30" uuid="840fd833-5895-47d0-b63f-dd058a936a8a">
<printWhenExpression><![CDATA[$F{flag}]]></printWhenExpression>
</reportElement>
<text><![CDATA[Any static text to separate groups]]></text>
</staticText>
</jr:cell>
</jr:groupFooter>
...
</jr:columnGroup>
</jr:table>