c#报表开发 简单程序数据集

2025-04-26 15:02:17

1.问题描述

FineReport报表的数据来源可以是数据库数据或是文本数据,并且还可以是其它任何类型的剞麽苍足数据,因为FineReport是通过AbstractTableData抽象类来读取数据源的,而上述所有的数据来源都继承实现其抽象方法,因此用户只要实现了AbstractTableData抽象类,也就可以用自定义类型的数据源了(程序数据集),FineReport报表引擎就能够读取定义的数据源作为报表数据源使用。

2.实现原理

AbstractTableData抽象类主要有5个方法,如下:

//获取AbstractTableData的总列数

public int getColumnCount();

//获取AbstractTableData中第columnIndex列的列名

public String getColumnName(int columnIndex);

//判断是否存在第rowIndex行,这主要是用于处理超大数据时,完全遍历所有数据获取总行数相当困难,用这个方法来判断第rowIndex行是否存在,存在则可读取

public boolean hasRow(int rowIndex);

//获取AbstractTableData的总行数

public int getRowCount();

//获取AbstractTableData中第columnIndex列,第rowIndex行的数据

public Object getValueAt(int rowIndex, int columnIndex);

在某些应用场景中,需要在程序中对数据进行处理后再作为报表的数据源使用。

3.示例

下面我们定义数据集为如下样式:列为Name,Score,值分别为Alex,15;Helly,22;Bobby,88作为程序数据集。

3.1定义程序数据源

定义一个类,继承AbstractTableData,并实现里面的方法,具体的代码如下:

packagecom.fr.data;

publicclassArrayTableDataDemoextendsAbstractTableData{

//定义程序数据集的列名与数据保存位置

privateString[]columnNames;

privateObject[][]rowData;

//实现构建函数,在构建函数中准备数据

publicArrayTableDataDemo(){

String[]columnNames={"Name","Score"};

Object[][]datas={{"Alex",newInteger(15)},

{"Helly",newInteger(22)},{"Bobby",newInteger(99)}};

this.columnNames=columnNames;

this.rowData=datas;

}

//实现ArrayTableData的其他四个方法,因为AbstractTableData已经实现了hasRow方法

publicintgetColumnCount(){

returncolumnNames.length;

}

publicStringgetColumnName(intcolumnIndex){

returncolumnNames[columnIndex];

}

publicintgetRowCount(){

returnrowData.length;

}

publicObjectgetValueAt(introwIndex,intcolumnIndex){

returnrowData[rowIndex][columnIndex];

}

}

将ArrayTableDataDemo.java编译生成ArrayTableDataDemo.class类。

将生成的类文件拷贝到报表工程/WEB-INF/classes目录下。由于该类是在com. fr.data包中的,因此最终应该将该ArrayTableData.class放在/WEB-INF/classes/com/fr/data下面。此时该程序数据源便定义好了。

3.2配置程序数据源

点击模板数据集下面的加号,选择程序数据集,然后在弹出的程序数据集对话框中,选择对应的class文件,如下图:

c#报表开发 简单程序数据集

3.3使用程序数据集

配置好程序数据源后便可以使用定义的程序数据集了,与其他类型的数据集使用方法是相同的,可以通过拖拽方法实现单元格数据列绑定。如下图:

c#报表开发 简单程序数据集

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢