`

jasperreport自定义JRDataSource

    博客分类:
  • java
阅读更多

package com.sniper.reports.util;

 

import java.util.ArrayList;

import java.util.Collection;

import java.util.Collections;

import java.util.Comparator;

import java.util.Iterator;

import java.util.List;

 

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JRField;

import net.sf.jasperreports.engine.data.JRAbstractBeanDataSource;

 

import com.sniper.reports.model.ItemStatReport;

 

public class PaAnCustomJRdataSource extends JRAbstractBeanDataSource {

 

/**

* dataSource

*/

private Collection<ItemStatReport> data;

private Object currentBean;

private Iterator<ItemStatReport> iterator;

private List<ItemStatReport> allData;

private int index = -1;

 

public PaAnCustomJRdataSource(Collection<ItemStatReport> collection) {

super(true);

if (collection.size() > 0) {

this.allData = (List<ItemStatReport>) collection;

List<ItemStatReport> list = (List<ItemStatReport>) collection;

Collections.sort(list, new Comparator<ItemStatReport>() {

public int compare(ItemStatReport o1, ItemStatReport o2) {

return o1.getSeqNumber() - o2.getSeqNumber();

}

});

List<ItemStatReport> dataList = new ArrayList<ItemStatReport>();

ItemStatReport itmesr = list.get(0);

int seqNumber = itmesr.getSeqNumber();

for (ItemStatReport isr : allData) {

if (isr.getSeqNumber() == seqNumber) {

dataList.add(isr);

} else {

break;

}

}

this.data = dataList;

this.iterator = data.iterator();

}

 

}

 

/**

*

*/

public boolean next() {

index++;

boolean hasNext = false;

if (this.iterator != null) {

hasNext = this.iterator.hasNext();

if (hasNext) {

this.currentBean = this.iterator.next();

}

}

return hasNext;

}

 

/**

*

*/

public Object getFieldValue(JRField field) throws JRException {

Object value = null;

String fieldName = field.getName();

String[] arr = fieldName.split("_");

if (arr.length > 1) {

int seqNumber = Integer.parseInt(arr[1]);

int dataLength = this.data.size();

int inteNumber = (seqNumber * dataLength) + this.index;

ItemStatReport positionObj = this.allData.get(inteNumber);

ItemStatReport currentObj = (ItemStatReport) currentBean;

if (currentObj.getStockOrgName().equals(positionObj.getStockOrgName())) {

value = getFieldValue(positionObj, field);

} else {

//FIXME:the list is sort error!

}

} else {

value = getFieldValue(currentBean, field);

}

return value;

}

 

/**

*

*/

public void moveFirst() {

if (this.data != null) {

this.iterator = this.data.iterator();

}

}

 

/**

* Returns the underlying bean collection used by this data source.

* @return the underlying bean collection

*/

public Collection<ItemStatReport> getData() {

return data;

}

 

/**

* Returns the total number of records/beans that this data source

* contains.

* @return the total number of records of this data source

*/

public int getRecordCount() {

return data == null ? 0 : data.size();

}

 

/**

* Clones this data source by creating a new instance that reuses the same

* underlying bean collection. 

* @return a clone of this data source

*/

public PaAnCustomJRdataSource cloneDataSource() {

return new PaAnCustomJRdataSource(data);

}

 

}


分享到:
评论

相关推荐

    jasperReport自定义javabean数据源实例

    在实际开发中,我们经常会遇到需要自定义数据源的情况,这时JasperReport提供了使用JavaBean作为数据源的功能。本实例将详细介绍如何通过自定义JavaBean数据源来生成报表。 首先,理解JavaBean是一种符合特定规范的...

    JasperReport 后台 代码 封装,采用JRDataSource方式

    JRDataSource是JasperReport中的一个关键概念,它是将数据绑定到报表模板的一种方式。 首先,我们要理解JRDataSource的工作原理。JRDataSource并不是一个具体的类,而是一个接口,定义了获取报表数据的方法。...

    JasperReport报表设计总结

    对于基于JavaBean集合的数据源,需要自定义JRDataSource的实现,确保next()方法能够正确遍历数据集,getFieldValue()方法能够根据字段名返回对应的数据。 总的来说,JasperReport通过其灵活的报表设计、丰富的数据...

    JasperReport实例导入可用

    - 使用 `JRDataSource` 接口实现自定义数据源,适应复杂的数据结构。 - `JRBeanCollectionDataSource` 或 `JRMapCollectionDataSource` 用于绑定 Java 对象或 Map 集合到报表。 7. **报表渲染** - 使用 `...

    JasperReport动态报表归并行数据

    通过以上分析,我们可以看出“JasperReport动态报表归并行数据”涉及到的核心概念包括动态报表设计、数据源处理、数据归并、自定义脚本let以及开发工具的使用。掌握这些知识点,能帮助开发者创建出适应各种业务需求...

    JasperReport 学习之路

    4. **DataSource**:讲解如何在报表中使用多种数据源,包括bean数组、bean集合或自定义数据源(只需实现`JRDataSource`接口)。 5. **Fonts**:展示不同字体的应用方法。 6. **Horizontal**:演示水平分栏报表的...

    jasperreport 生成pdf,html,xml,csv,xls报表,myeclipse源码

    报表可以通过SQL查询动态获取数据,也可以使用JavaBeans或其他自定义数据提供者。 3. **多格式输出**:jasperreport的强大之处在于其能够将同一份报表导出为不同的格式,满足不同应用场景的需求。例如,PDF适合打印...

    Jasperreport+ireport 实践操作及web应用

    3. 数据源和自定义数据源:数据源是报表设计的关键,JasperReport支持多种数据源,包括JRDataSource接口实现的自定义数据源。在实际项目中,你可以根据需求连接数据库、CSV文件或其他数据提供者。 4. 国际化(I18N...

    jasperReport所需的jar文件

    接着,使用JRDataSource或JDBC数据源填充报表,最后通过JasperFillManager.fillReport()方法生成报表,并通过JasperExportManager.exportReportToPdf()等方法导出为PDF或其他格式。 总之,这些jar文件构成了一个...

    jasperReport学习资料

    2. **JRDataSource接口**:支持自定义数据源,如Java集合、CSV文件等。 3. **JRBeanCollectionDataSource**:适用于Java对象集合,自动映射对象属性到报表字段。 **四、JasperReport与框架的集成** 1. **Spring...

    JasperReport + Servlet Web应用之:HTML显示报表内容

    3. **数据填充**:在Servlet中,我们需要创建一个JRDataSource对象,用于存储报表数据。这个数据源可以是SQL查询结果、Java集合或其他自定义的数据结构。 4. **生成报表**:使用JasperFillManager的fill方法,传入...

    JasperReport6.4.0报表设计

    通过JRDataSource接口,可以实现对复杂数据结构的支持,比如树形数据或自定义对象。 7. **动态报表生成** 在运行时,JasperReport支持动态数据填充,可以根据用户的输入或系统状态生成不同的报表。例如,通过传递...

    JasperReport报表成型框架

    - **SQL查询**: 可以直接在模板中编写SQL查询,或者通过JRDataSource接口提供自定义数据。 - **数据集**: 数据集是查询结果的封装,可以用于多个报表元素,实现数据复用。 3. **报表渲染** - **输出格式**: 支持...

    spring MVC Web应用中集成Jasper报表工具

    然后,使用JasperReport的JRDataSource接口或JRBeanCollectionDataSource类将这些数据转化为Jasper报表可识别的格式。例如,如果你使用的是Java集合作为数据源,可以创建一个JRBeanCollectionDataSource实例,传入你...

    JasperReport API

    - **自定义函数和字段**: 开发者可以扩展JasperReport的功能,添加自定义的函数和字段类型。 ### 实例代码 ```java // 加载报表模板 InputStream reportStream = getClass().getResourceAsStream("/report.jrxml")...

    jasperreport帮助文档

    JasperReport的API是其核心功能之一,允许开发者通过编程方式与报表引擎进行交互,实现动态报表生成和自定义操作。 **1. JasperReport API基础** JasperReport API主要包括以下几个关键组件: - `JasperDesign`: ...

    JasperReport 所需的所有包

    JasperReport 提供了丰富的图表类型,如柱状图、折线图、饼图、地图等,可以自定义颜色、样式、数据系列等,使得报表更加直观和易于理解。 总之,JasperReport 是一个功能强大的报表工具,其全面的API和设计工具使...

    jasperreport 与ireport 的配置与使用

    IReport支持WYSIWYG(所见即所得)编辑模式,可以方便地添加文本、图片、图表等元素,同时支持自定义样式和表达式。 ### 配置JasperReport与IReport 1. **环境准备**:确保已经安装了Java JDK,因为两者都需要Java...

    jasperReport资料文档5

    **示例**: 实现`JRDataSource`接口,创建一个自定义类,该类可以根据需要读取数据并提供给JasperReports。 #### 总结 通过以上介绍可以看出,JasperReports支持多种非数据库数据源,使得开发者能够在没有数据库...

Global site tag (gtag.js) - Google Analytics