用CustomDataSource向iReport中传递数据

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

iReport是个很好用的免费报表制作工具。它小巧易用,也不乏扩展性。利用CustomDataSource向报表中传数据就是它的可扩展性的一个方面。

实现CustomDataSource需实现接口JRDataSource。这里有两个方法-public boolean next() throws JRException 和public Object getFieldValue(JRField field) throws JRException需要实现。

当然,既然是dataSource,肯定得有个乘载数据的地方,这里我用的是一个List,List中的一个对象封装了一条记录。iReport会利用next()遍历这个List,从而取得所有的数据。

getFieldValue则是用来从List中取相应的值。

String fieldName = field.getName();

ArchPerInfoForm api = new ArchPerInfoForm();

api = (ArchPerInfoForm)data.get(index);

if ("A01".equals(fieldName)) {

value = api.getAac001();

} else if ("A02".equals(fieldName)) {

value = api.getAac002();

} else if ("A03".equals(fieldName)) {

value = api.getAac003();

}

return value;

这里传来一个field,可以通过判定field的fieldName来决定取form中的什么字段。

但这样实现很不科学,我们有很多报表需要这么处理,而这里的dataSource根本没什么复用性。

考虑了一下,我决定抽象出一个接口。那就是ReportDataInterface,在这里定义一个方法getFieldByName(String fieldName)。这样我把List中取得的对象当成这个接口来处理,只对这个接口进行操作。在其他地方就不必重新写这个dataSource,只需定义一个对象,实现ReportDataInterface接口,然后把装有数据的这些对象放到List中传给这个DataSource,一切ok了。

对了这里我似乎忘了说一点,上面代码中的”A01”是我在报表中定义的列的名字。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有