简单程序数据集

编辑
  • 文档创建者:印然
  • 浏览次数:21209次
  • 编辑次数:17次
  • 最近更新:Carly 于 2019-09-11
  • 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,99 作为程序数据集。

    3.1 定义程序数据源

    定义一个类,继承 AbstractTableData,并实现里面的方法,详细的代码参见:

    https://git.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/data/ArrayTableDataDemo.java

    3.2 编译 class 文件

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

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

    3.3 配置程序数据源

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

    222

    3.4 使用程序数据集

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

    222

    4.注意事项

    远程设计的情况下,使用程序数据集(任意一个 class ),服务器和本地上都需要有 class 文件,否则编译或预览时会报错。

    附件列表


    主题: 二次开发
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]