目录

自定义数据集使用步骤

用户在使用自定义数据集时,可按以下步骤进行:

下面结合一个简单示例来详细说明自定义数据集的具体使用。

第一步:实现数据集工厂类 

根据实际业务的需要,基于IDataSetFactory接口创建数据集工厂实现类,在createDataSet()方法中实现客户化的数据集对象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/】目录下,如下图:


建立自定义数据集

选择“其他数据源”下的“自定义数据集”类型进行数据集的创建,如下图所示:

在自定义数据集的设置界面中,输入数据集工厂实现类的完成路径名,表示当前建立的自定义数据集使用该工厂类完成数据集对象的生成。如下图:

注意:如果自定义数据集需要传入参数,则还可以在下面列表中进一步添加数据集的参数。自定义数据集设置参数的示例,请参考:获取数据集参数

本示例的数据集无需设置参数,所以直接点击“完成”然后设置数据集的名称,即可成功建立一个自定义数据集,供报表进行使用。