假设我有多个包含饼图的细节带。每个饼图的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
似乎太通用了。提前谢谢!
答案 0 :(得分:0)
如果您的结果集有3行,那么您的详细信息区域将重复3次。如果您在详细信息区域中放置饼图,那么您将获得3个饼图。
上面的代码使用误导性名称,因为每行中都有一个PieSlice
。所以那些PieSlices
实际上不是馅饼切片。嗯..当然他们可以...但每个馅饼都会有一个切片。它没用。
听起来你需要把饼图放到标题或摘要带中。然后,您将拥有可以使用的完整数据集。您可以在图表中显示每个饼图切片标签和值。