Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
用CustomDataSource向iReport中传递数据

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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




相关文章

相关软件