自定义JRDataSource数据源


自定义 JRDataSource 数据源

如有需要可以自定义 JRDataSource 数据源,比如要在 JTable 控件中显示又想使用 jasperreports 中使用 , 可以让 JTable 的数据源适配 JRDataSource, 只需要实现 JRDataSource 接口即可。

创建 DailySalesDataSource.java, 这是报表的数据源。这个类实现了 jasperreports 中提供的数据源接口 JRDataSource, 实现其中的两个方法 :next() getFieldValue(JRField field)


import java.util.List;

import net.sf.jasperreports.engine.JRDataSource;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JRField;


public class DailySalesDataSource implements JRDataSource

{


private List<Object> data ;

private int index = -1;


public DailySalesDataSource(List<Object> data)

{

this . data = data;

}


/**

* 实现了 JRDataSource 中的方法.判断是否还有下一个.

*/

public boolean next() throws JRException

{

index ++;

return ( index < data .size());

}


/**

* 实现了 JRDataSource 中的方法.

* @param field 是对应报表中的要填充的字段的名称.

*/

public Object getFieldValue(JRField field) throws JRException

{

String fieldName = field.getName();

Object obj = data .get( index );

try

{

java.lang.reflect.Field objField = obj.getClass().getDeclaredField(fieldName);

if (objField != null )

{

objField.setAccessible( true );

return objField.get(obj);

}

}

catch (Exception e)

{


e.printStackTrace();

}

return null ;


}

}


创建工厂类,生成 ireport 数据源

import java.util.ArrayList;

import java.util.List;


import net.sf.jasperreports.engine.JRDataSource;


public class DailySalesDataSourceFactory

{

// 为了在 ireport 中能够测试,必须使用 static 方法

public static JRDataSource createDataSource()

{

// 数据源的生成,通常调用 dao 操作

List<Object> data = new ArrayList<Object>();

for ( int i = 0; i < 100; i++)

{

data.add( new DailySales( " 货号 " + i, " 产品 " + i, i, i * 100));

}

return new DailySalesDataSource(data);

}

}

ireport 菜单" Data "中选择” Connection/Data sources”, 点击在弹出框中的 new 按钮增加一个 custom JRDataSource 数据源 .


设置活动连接.在菜单" Data "中选择” Set Active Connection”.

Report Query , 在菜单" Data "中选择” Report Query”, 填写 javabean

相关步骤见图示 ireport 中使用 javabean 作数据源开发 基于 jasperreports 报表 过程

你可能感兴趣的:(DAO,.net,活动)