自定义数据集使用步骤
用户在使用自定义数据集时,可按以下步骤进行:
- 首先基于接口实现自定义数据集工厂类
- 部署数据集工厂实现类,并在新建数据集时选择在其他数据源下建立自定义数据集,设置该数据集调用的工厂类
下面结合一个简单示例来详细说明自定义数据集的具体使用。
第一步:实现数据集工厂类
根据实际业务的需要,基于IDataSetFactory接口创建数据集工厂实现类,在createDataSet()方法中实现客户化的数据集对象DataSet生成方式。
实例化DataSet的方法
构造自定义数据集,本质上是实例化DataSet。
进行DataSet的实例化可按以下步骤进行:
- 创建DataSet对象
- 添加列信息
- 添加行信息
创建DataSet对象时开发者可以根据实际情况使用合适的构造方法。
下面给出两种创建DataSet对象的参考示例:
示例1:简单方式创建DataSet对象
使用DataSet(java.lang.String dataSetName)实例化,示例代码如下:
/*
* new DataSet()时可以使用不同构造方法。
* 如果实例化时不初始化列数和行数,则可以使用一个指定数据集名称的参数来实例化即可。
* 可以直接用一个字符串设置实例化DataSet时的名字,需要与数据集时保存的名称一致
* 也可以使用DataSetConfig.getName()方法,来动态的获取当前数据集的名称
* 如果想实例化DataSet时,不受名称限制,可以使用DataSet ds = new DataSet(null) 的方式实例化
*/
DataSet ds = new DataSet("ds1");
//增加列名id
ds.addCol("id");
ds.addCol("name");
ds.addCol("degree");
//循环创建10行数据
for( int i = 1; i <= 10; i++ ) {
Row row = ds.addRow();
row.setDataInt(1, i);
row.setData(2, "name"+i);
row.setData(3, i);
}
示例2:指定数据集行、列数并使用列信息对象创建DataSet对象
使用DataSet(int initRowCap, int colCount, java.lang.String dataSetName) 实例化,指定实例化时数据集对象的列数和行数,并且使用列信息对象封装多项列信息。
示例代码如下:
//定义实例化时的行数、列数,,一般与实际列数相等为宜
int rowCount=3;
int colCount=3;
String dsName="ds2";//定义数据集名
String[] colNames={"id","name","age"};//定义列名数组
String[] titleNames={"编号","姓名","年龄"};//定义列中文名数组
//构造数据集时候建议可以指定差不多的行数、列数,可以避免每次追加行、列时不停地分配空间
DataSet ds = new DataSet(rowCount, colCount, dsName);
//添加列,注意:添加列要在添加行之前
for (int i = 0; i < colCount; i++) {
ColInfoBase ci = newColInfoBase();//逐列构造列信息对象
ci.setColName(colNames[i]);//设置列英文名
ci.setColTitle(titleNames[i]);//设置列中文名,可用作别名
ci.setDataType(com.runqian.report4.usermodel.Types.DT_STRING); //设置列的数据类型
ds.addColInfo(ci);//若数据集运算时不需要如此多的信息,可直接调用ds.addCol(colName)即可
}
//添加行,设置数据集中的数据
for (inti = 0; i < rowCount; i++) {
Row row = ds.addRow();
row.setDataInt(1, i);
row.setData(2, "name"+i);
row.setDataInt(3, i*2);
}
数据集工厂实现类完整示例
以下是自定义数据集工厂类的一个完整实现代码:
package com.api;
import com.runqian.report4.usermodel.*;
import com.runqian.report4.dataset.*;
public class MyDataSet implements IDataSetFactory{
public DataSet createDataSet (Context ctx, DataSetConfig dsc, boolean retrieve){
DataSet ds = new DataSet(null); //dataset名要与设计报表时取的数据集名称一致,若想不受限制,可以使用DataSet ds= new DataSet(null)
//创建String数据,存储列名
String[] colNames={"empid","empname","degree"};
//增加列
for(inti=0;i<colNames.length;i++){
ds.addCol(colNames[i]);
}
//创建二维数组,保存姓名以及学历编码
String [][]empinfo={{"张三","3"},{"李四","7"},{"王五","9"},{"小刘","5"},{"小李","2"}};
//循环遍历二维数据的数据,分别作为数据集的姓名和学历字段值
for( int i = 0; i < empinfo.length; i++ ) {
//增加一行行数
Row row = ds.addRow();
row.setDataInt(1, i);
row.setData(2, empinfo[i][0]);
row.setData(3, empinfo[i][1]);
}
return ds;
}
}
第二步:部署与调用自定义数据集类
实现的自定义数据集工厂类必须进一步在产品中进行部署,才能在建立数据集时使用。
具体如下:
部署自定义数据集工厂类
首先,将自定义数据集工厂类编译后的class文件存放至应用【WEB-INF/classes】的相应目录下,注意目录路径必须包含包名。
例如本示例中实现的工厂类为com.api.MydataSet,位于【com.api】包内,所以编译后的MydataSet.class必须存放至【WEB-INF/classes/com/api/】目录下,如下图:
建立自定义数据集
选择“其他数据源”下的“自定义数据集”类型进行数据集的创建,如下图所示:
在自定义数据集的设置界面中,输入数据集工厂实现类的完成路径名,表示当前建立的自定义数据集使用该工厂类完成数据集对象的生成。如下图:
注意:如果自定义数据集需要传入参数,则还可以在下面列表中进一步添加数据集的参数。自定义数据集设置参数的示例,请参考:获取数据集参数。
本示例的数据集无需设置参数,所以直接点击“完成”然后设置数据集的名称,即可成功建立一个自定义数据集,供报表进行使用。