服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用customdatasource向ireport中传递数据

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

扫描关注微信公众号