WEB开发网
开发学院WEB开发Jsp 用CustomDataSource向iReport中传递数据 阅读

用CustomDataSource向iReport中传递数据

 2008-01-05 18:45:50 来源:WEB开发网   
核心提示:iReport是个很好用的免费报表制作工具,它小巧易用,用CustomDataSource向iReport中传递数据,也不乏扩展性,利用CustomDataSource向报表中传数据就是它的可扩展性的一个方面,一切ok了,对了这里我似乎忘了说一点,实现CustomDataSource需实现接口JRDataSource,

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”是我在报表中定义的列的名字。


Tags:CustomDataSource iReport 传递

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接