JasperReports:bean如何映射到正确的band / elements?

时间:2011-12-04 02:45:23

标签: java jasper-reports

假设我有多个包含饼图的细节带。每个饼图的JRXML如下所示:

<pieDataset>
    <keyExpression><![CDATA[$F{PieSlice}.label]]></keyExpression>
    <valueExpression><![CDATA[$F{PieSlice}.value]]></valueExpression>
</pieDataset>

然后我使用JRBeanArrayDataSource来填充这些饼图:

public class PieSlice
{
    private String label;
    private Double value;

    public PieSlice()
    {
        this("", -1);
    }

    public PieSlice(String lbl, Double val)
    {
        setLabel(lbl);
        setValue(val);
    }

    public String getLabel()
    {
        return label;
    }

    public String getValue()
    {
        return value;
    }
}

public class PieSliceFactory
{
    private static PieSlice[] slices = 
    {
        new PieSlice("Fizz", 75.0),
        new PieSlice("Buzz", 25.0);
    };

    public static PieSlice[] getSlices()
    {
        return ArrayList.asList(slices);
    }
}

JasperReport jasperReport = JasperFillManager.fillReport(jasperDesign, new JRBeanArrayDataSource(PieSliceFactory.getSlices()));

那么如何指定bean数组中的哪些数据被“路由”到正确的饼图?如果我只希望“ Fizz ”饼图切换到详细信息带 A 中的饼图 X ,但我想要“ Buzz “切片填充饼图 Y 内部细节带 B

有没有办法在表达式或CDATA中使用ID?必须有一种方法来指定哪些波段/元素数据被映射到。表达式$F{ClassName}.property似乎太通用了。提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果您的结果集有3行,那么您的详细信息区域将重复3次。如果您在详细信息区域中放置饼图,那么您将获得3个饼图。

上面的代码使用误导性名称,因为每行中都有一个PieSlice。所以那些PieSlices实际上不是馅饼切片。嗯..当然他们可以...但每个馅饼都会有一个切片。它没用。

听起来你需要把饼图放到标题或摘要带中。然后,您将拥有可以使用的完整数据集。您可以在图表中显示每个饼图切片标签和值。