iReport+jasperReport之BEAN数据源(续)

转载自:http://www.blogjava.net/bulktree/archive/2008/12/12/245963.html

上篇bean数据源,如果我们自己定义自己的数据源该如何去写呢?
        jasperReport提供了很多的便利去实现自己的DataSource,简单的有三种方式:
        直接实现bean的方式      bean工厂     表格模型

还是使用前面的person.jasper文件,和Person.java VO类

    直接实现bean的方式:
    此种方式需要实现JRDataSource接口,定义一个二维对象数组用来存放数据,通过遍历数组的数据实现getFieldValue()和next()方法

    PersonDataSource.java
iReport+jasperReport之BEAN数据源(续)package org.bulktree.ireport.customdata;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)
import javax.activation.DataSource;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)
import net.sf.jasperreports.engine.JRDataSource;
iReport+jasperReport之BEAN数据源(续)
import net.sf.jasperreports.engine.JRException;
iReport+jasperReport之BEAN数据源(续)
import net.sf.jasperreports.engine.JRField;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)
/**
iReport+jasperReport之BEAN数据源(续) * 
iReport+jasperReport之BEAN数据源(续) * 
@author bulktree Email: [email protected] @ Nov 7, 2008
iReport+jasperReport之BEAN数据源(续) 
*/

iReport+jasperReport之BEAN数据源(续)
public class PersonDataSource implements JRDataSource {
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)    
public PersonDataSource() {
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)    }

iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)    
private Object[][] data = {
iReport+jasperReport之BEAN数据源(续)            
"001""bulktree1""Man1""21""001111""IsoftStone1" },
iReport+jasperReport之BEAN数据源(续)            
"002""bulktree2""Man2""22""002222""IsoftStone2" },
iReport+jasperReport之BEAN数据源(续)            
"003""bulktree3""Man3""23""003333""IsoftStone3" },
iReport+jasperReport之BEAN数据源(续)            
"004""bulktree4""Man4""24""004444""IsoftStone4" },
iReport+jasperReport之BEAN数据源(续)            
"005""bulktree5""Man5""25""005555""IsoftStone5" },
iReport+jasperReport之BEAN数据源(续)            
"006""bulktree6""Man6""26""006666""IsoftStone6" },
iReport+jasperReport之BEAN数据源(续)            
"007""bulktree7""Man7""27""007777""IsoftStone7" },
iReport+jasperReport之BEAN数据源(续)            
"008""bulktree8""Man8""28""008888""IsoftStone8" },
iReport+jasperReport之BEAN数据源(续)            
"009""bulktree9""Man9""29""009999""IsoftStone9" },
iReport+jasperReport之BEAN数据源(续)            
"001""oakertree1""Man1""21""001111""IsoftStone1" },
iReport+jasperReport之BEAN数据源(续)            
"002""oakertree2""Man2""22""002222""IsoftStone2" },
iReport+jasperReport之BEAN数据源(续)            
"003""oakertree3""Man3""23""003333""IsoftStone3" },
iReport+jasperReport之BEAN数据源(续)            
"004""oakertree4""Man4""24""004444""IsoftStone4" },
iReport+jasperReport之BEAN数据源(续)            
"005""oakertree5""Man5""25""005555""IsoftStone5" },
iReport+jasperReport之BEAN数据源(续)            
"006""oakertree6""Man6""26""006666""IsoftStone6" },
iReport+jasperReport之BEAN数据源(续)            
"007""oakertree7""Man7""27""007777""IsoftStone7" },
iReport+jasperReport之BEAN数据源(续)            
"008""oakertree8""Man8""28""008888""IsoftStone8" },
iReport+jasperReport之BEAN数据源(续)            
"009""oakertree9""Man9""29""009999""IsoftStone9" },
iReport+jasperReport之BEAN数据源(续)            
"001""laoshulin1""Man1""21""001111""IsoftStone1" },
iReport+jasperReport之BEAN数据源(续)            
"002""laoshulin2""Man2""22""002222""IsoftStone2" },
iReport+jasperReport之BEAN数据源(续)            
"003""laoshulin3""Man3""23""003333""IsoftStone3" },
iReport+jasperReport之BEAN数据源(续)            
"004""laoshulin4""Man4""24""004444""IsoftStone4" },
iReport+jasperReport之BEAN数据源(续)            
"005""laoshulin5""Man5""25""005555""IsoftStone5" },
iReport+jasperReport之BEAN数据源(续)            
"006""laoshulin6""Man6""26""006666""IsoftStone6" },
iReport+jasperReport之BEAN数据源(续)            
"007""laoshulin7""Man7""27""007777""IsoftStone7" },
iReport+jasperReport之BEAN数据源(续)            
"008""laoshulin8""Man8""28""008888""IsoftStone8" },
iReport+jasperReport之BEAN数据源(续)            
"009""laoshulin9""Man9""29""009999""IsoftStone9" } }
;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)    
private int index = -1;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)    
public Object getFieldValue(JRField jrField) throws JRException {
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)        Object value 
= null;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)        String fieldName 
= jrField.getName();
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)        
if ("pid".equals(fieldName)) {
iReport+jasperReport之BEAN数据源(续)            value 
= data[index][0];
iReport+jasperReport之BEAN数据源(续)        }

iReport+jasperReport之BEAN数据源(续)        
if ("name".equals(fieldName)) {
iReport+jasperReport之BEAN数据源(续)            value 
= data[index][1];
iReport+jasperReport之BEAN数据源(续)        }

iReport+jasperReport之BEAN数据源(续)        
if ("sex".equals(fieldName)) {
iReport+jasperReport之BEAN数据源(续)            value 
= data[index][2];
iReport+jasperReport之BEAN数据源(续)        }

iReport+jasperReport之BEAN数据源(续)        
if ("age".equals(fieldName)) {
iReport+jasperReport之BEAN数据源(续)            value 
= data[index][3];
iReport+jasperReport之BEAN数据源(续)        }

iReport+jasperReport之BEAN数据源(续)        
if ("password".equals(fieldName)) {
iReport+jasperReport之BEAN数据源(续)            value 
= data[index][4];
iReport+jasperReport之BEAN数据源(续)        }

iReport+jasperReport之BEAN数据源(续)        
if ("department".equals(fieldName)) {
iReport+jasperReport之BEAN数据源(续)            value 
= data[index][5];
iReport+jasperReport之BEAN数据源(续)        }

iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)        
return value;
iReport+jasperReport之BEAN数据源(续)    }

iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)    
public boolean next() throws JRException {
iReport+jasperReport之BEAN数据源(续)        index
++;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)        
return (index < data.length);
iReport+jasperReport之BEAN数据源(续)    }

iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)}

iReport+jasperReport之BEAN数据源(续)

这个和遍历数据库Result的游标是一样的道理,刚开始的时候是指向第一条数据的前面,next一下才会指向第一条数据,相信这个不是很难懂吧!通过以下语句产生 JasperPrint对象
iReport+jasperReport之BEAN数据源(续)jasperPrint = JasperFillManager.fillReport(jasperReport,
iReport+jasperReport之BEAN数据源(续)                    getReportParameter(), personDataSource);
personDataSource为PersonDataSource的对象,预览效果如下:iReport+jasperReport之BEAN数据源(续)

     bean工厂:

    此种方式不需要实现JRDataSource接口,定义bean数组存放数据,只需要简单的提供两个方法即可:返回一个对象数组和返回一个bean集合
    PersonBeanFactory.java代码如下:
iReport+jasperReport之BEAN数据源(续)package org.bulktree.ireport.customdata;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)
import java.util.Arrays;
iReport+jasperReport之BEAN数据源(续)
import java.util.Collection;
iReport+jasperReport之BEAN数据源(续)
iReport+jasperReport之BEAN数据源(续)
/**
iReport+jasperReport之BEAN数据源(续) * 
iReport+jasperReport之BEAN数据源(续) * 
@author bulktree Email: [email protected] @ Nov 7, 2008
iReport+jasperReport之BEAN数据源(续) 
*/

iReport+jasperReport之BEAN数据源(续)
public class PersonBeanFactory {
iReport+jasperReport之BEAN数据源(续)    
private static Person[] data = {
iReport+jasperReport之BEAN数据源(续)            
new Person("001""bulktree1""Man1""21""001111""IsoftStone1"),
iReport+jasperReport之BEAN数据源(续)            
new Person("002""bulktree2""Man2""22""002222""IsoftStone2"),
iReport+jasperReport之BEAN数据源(续)            
new Person("003""bulktree3""Man3""23""003333""IsoftStone3"),
iReport+jasperReport之BEAN数据源(续)            
new Person("004""bulktree4""Man4""24""004444""IsoftStone4"),
iReport+jasperReport之BEAN数据源(续)            
new Person("005""bulktree5""Man5""25""005555""IsoftStone5"),
iReport+jasperReport之BEAN数据源(续)            
new Person("006""bulktree6""Man6""26""006666""IsoftStone6"),
iReport+jasperReport之BEAN数据源(续)            
new Person("007""bulktree7""Man7""27""007777""IsoftStone7"),
iReport+jasperReport之BEAN数据源(续)            
new Person("008""bulktree8""Man8""28""008888""IsoftStone8"),
iReport+jasperReport之BEAN数据源(续)            
new Person("009""bulktree9""Man9""29""009999""IsoftStone9"),
iReport+jasperReport之BEAN数据源(续)            
new Person("001""oakertree1""Man1""21""001111""IsoftStone1"),
iReport+jasperReport之BEAN数据源(续)            
new Person("002""oakertree2"