JasperReports:创建表时尝试使用没有列组

时间:2015-10-26 11:14:43

标签: java jasper-reports crosstab

我想知道是否有办法使用JapserReports CrossTab以任何其他方式制作这样的enter image description here,其中行组是字段{ {1}}。

使用的数据集是value7

SubView是:

JRBeanCollectionDataSource(list of SubViews)

请注意,不需要列组,但如果我没有配置列组,则jasper无法成功编译(错误消息:public class SubView{ //... private String value1; private String value2; private String value3; private String value4; private String value5; private String value6; private String value7; //...getters and setters... } )。

1 个答案:

答案 0 :(得分:1)

这对我来说似乎不是crosstab问题。当列动态时使用Crosstab,因此您的错误消息

  

交叉表应至少有一个列组。

因为“不需要列组”,所以使用detail band上的普通groupingvalue7来获得结果。

因此,在您将columnHeader中的标签和detail band中的值1-6放在一起后,您会在值7上添加groupHeader个带

的分组

示例(我只在detail band中包含值3才能对答案进行排序

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report2" printOrder="Horizontal" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isFloatColumnFooter="true" uuid="8944f542-2955-4224-933c-5a87fd36f527">
<queryString>
    <![CDATA[]]>
</queryString>
<field name="value1" class="java.lang.String"/>
<field name="value2" class="java.lang.String"/>
<field name="value3" class="java.lang.String"/>
<field name="value7" class="java.lang.String"/>
<group name="Value7">
    <groupExpression><![CDATA[$F{value7}]]></groupExpression>
    <groupHeader>
        <band height="21">
            <textField>
                <reportElement x="0" y="0" width="300" height="20" uuid="208ca6e5-b396-47cb-858b-71039f5bdf7a"/>
                <textFieldExpression><![CDATA["Value 7: " + $F{value7}]]></textFieldExpression>
            </textField>
        </band>
    </groupHeader>
</group>
<background>
    <band/>
</background>
<columnHeader>
    <band height="50">
        <staticText>
            <reportElement x="0" y="30" width="100" height="20" uuid="edf0f0f1-c979-4d20-987e-e8decb0b584a"/>
            <text><![CDATA[value1]]></text>
        </staticText>
        <staticText>
            <reportElement x="100" y="30" width="100" height="20" uuid="4287323f-e6d3-40d8-a2d4-44981bfa5c59"/>
            <text><![CDATA[value2]]></text>
        </staticText>
        <staticText>
            <reportElement x="200" y="30" width="100" height="20" uuid="b9aa7dfd-edd8-439b-b4c7-12916a740da8"/>
            <text><![CDATA[value3]]></text>
        </staticText>
    </band>
</columnHeader>
<detail>
    <band height="24">
        <textField>
            <reportElement x="0" y="0" width="100" height="20" uuid="2bcc436d-4c3a-4db1-a2ea-87edf92af98f"/>
            <textFieldExpression><![CDATA[$F{value1}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="100" y="0" width="100" height="20" uuid="f893721e-1aa6-44ca-9a9a-ac795ff63a0a"/>
            <textFieldExpression><![CDATA[$F{value2}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="200" y="0" width="100" height="20" uuid="36ad9612-620b-4eec-9608-f26b5306b01a"/>
            <textFieldExpression><![CDATA[$F{value3}]]></textFieldExpression>
        </textField>
    </band>
</detail>
</jasperReport>

如果您仍想使用交叉表,则需要以不同方式设置数据集(因为列也会变为动态数据),请查看以下示例:crosstab example