首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

java 表格开发

2012-11-01 
java 报表开发二:实现生成报表:? ?1.普通的做法是。定义一个javaben类,包含从1月到12月份的所有字段。eg:??p

java 报表开发

二:实现生成报表:

? ?1.普通的做法是。定义一个javaben类,包含从1月到12月份的所有字段。eg:

??public class RepProjectStockModeSumReportextends BaseObject implements java.io.Serializable {

???????? privateString stockMode; //采购模式

???????? privateDouble stockNumber1; //数量

???????? privateDouble paStockPrice1; //平安采购价格

???????? privateDouble marketPrice1; //市场价格

???????? privateDouble marketSaveMoney1; //节约金额

???????? privateDouble marketSaveMoneyPer1; //节约比例

???????? privateDouble stockNumber2; //

???????? privateDouble paStockPrice2; //

???????? privateDouble marketPrice2; //

???????? privateDouble marketSaveMoney2; //

???????? privateDouble marketSaveMoneyPer2; //

}

?每一行就是一个model记录。

?这个是比较常用,比较简单的做法,也可以说是最稳定的做法。一般情况下,我们应该用它,除非你是跟我一样,不着实际的人。

?2.我的做法:

?? publicclass RepProjectStockModeSumReport extends BaseObject implementsjava.io.Serializable {

???????? privateString stockMode; //采购模式

???????? privateDouble stockNumber; //数量

???????? privateDouble paStockPrice; //平安采购价格

???????? privateDouble marketPrice; //市场价格

???????? privateDouble marketSaveMoney; //节约金额

???????? privateDouble marketSaveMoneyPer; //节约比例

}

即只列出一月份的属性,每个实体代表每个月份下的一行数据。

及一行下存在多条model数据。

三:自定义javabean数据源:

自定义javabean数据源很简单,只需要继承extends JRAbstractBeanDataSource就行了,同时实现next()和getFieldValue方法。

通过在自定义的javabean数据源中,指定获取当前显示数据的规则,从而决定当前显示那一条model数据。

eg:

public class PaAnCustomJRdataSource extendsJRAbstractBeanDataSource {

?

???????? privateCollection<ItemStatReport> data;

???????? privateObject currentBean;

???????? privateIterator<ItemStatReport> iterator;

???????? privateList<ItemStatReport> allData;

???????? privateint index = -1;

?

???????? publicPaAnCustomJRdataSource(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>() {

???????????????????????????????????? publicint compare(ItemStatReport o1, ItemStatReport o2) {

?????????????????????????????????????????????? returno1.getSeqNumber() - o2.getSeqNumber();

???????????????????????????????????? }

??????????????????????????? });

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

??????????????????????????? ItemStatReportitmesr = list.get(0);

??????????????????????????? intseqNumber = itmesr.getSeqNumber();

??????????????????????????? for(ItemStatReport isr : allData) {

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

?????????????????????????????????????????????? dataList.add(isr);

???????????????????????????????????? }else {

?????????????????????????????????????????????? break;

???????????????????????????????????? }

??????????????????????????? }

??????????????????????????? this.data= dataList;

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

?????????????????? }

?

???????? }

???????? publicboolean next() {

?????????????????? index++;

?????????????????? booleanhasNext = false;

?????????????????? if(this.iterator != null) {

??????????????????????????? hasNext= this.iterator.hasNext();

??????????????????????????? if(hasNext) {

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

??????????????????????????? }

?????????????????? }

?????????????????? returnhasNext;

???????? }

???????? publicObject getFieldValue(JRField field) throws JRException {

?????????????????? Objectvalue = null;

?????????????????? StringfieldName = field.getName();

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

?????????????????? if(arr.length > 1) {

??????????????????????????? intseqNumber = Integer.parseInt(arr[1]);

??????????????????????????? intdataLength = this.data.size();

??????????????????????????? intinteNumber = (seqNumber * dataLength) + this.index;

??????????????????????????? ItemStatReportpositionObj = this.allData.get(inteNumber);

??????????????????????????? ItemStatReportcurrentObj = (ItemStatReport) currentBean;

??????????????????????????? if(currentObj.getCompareCol().intValue() == positionObj.getCompareCol().intValue()){

???????????????????????????????????? value= getFieldValue(positionObj, field);

??????????????????????????? }else {

???????????????????????????????????? thrownew RuntimeException("no found target Object !");

??????????????????????????? }

?????????????????? }else {

??????????????????????????? value= getFieldValue(currentBean, field);

?????????????????? }

?????????????????? returnvalue;

???????? }

}

public class PaAnCustomOfTwolJRdataSourceextends JRAbstractBeanDataSource {

???????? privateCollection<ItemStatReport> data;

???????? privateObject currentBean;

???????? privateIterator<ItemStatReport> iterator;

???????? privateList<ItemStatReport> allData;

???????? privateList<ItemStatReport> secondData;//二级数据源

???????? privateInteger currParentVal;

???????? privatestatic ThreadLocal<Integer> threadLocal = newThreadLocal<Integer>() {

?????????????????? protectedInteger initialValue() {

??????????????????????????? return0;

?????????????????? }

???????? };//保存线程变量

?

???????? publicPaAnCustomOfTwolJRdataSource(Collection<ItemStatReport> collection,Integer parentVal1) {

?????????????????? super(true);

?????????????????? this.currParentVal= parentVal1;

?????????????????? intlength = collection.size();

?????????????????? if(length > 0) {

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

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

??????????????????????????? List<ItemStatReport>data = new ArrayList<ItemStatReport>();

??????????????????????????? //FIXME:加入排序方法

??????????????????????????? //TODO:加入获取数据源的算法。

??????????????????????????? intcount = threadLocal.get();

??????????????????????????? intj = count;

??????????????????????????? for(; j < length; j++) {

???????????????????????????????????? ItemStatReportitemSr = allData.get(j);

???????????????????????????????????? Integercom1 = itemSr.getCompareCol1();

???????????????????????????????????? if(com1 != null && com1.intValue() == parentVal1.intValue()) {

?????????????????????????????????????????????? dataList.add(itemSr);

?????????????????????????????????????????????? count++;

???????????????????????????????????? }else {

?????????????????????????????????????????????? break;

???????????????????????????????????? }

??????????????????????????? }

??????????????????????????? //resetvariable count

??????????????????????????? if(count == length) {

???????????????????????????????????? count= 0;

??????????????????????????? }

??????????????????????????? threadLocal.set(newInteger(count));

??????????//确定报表的行数。

??????????????????????????? for(int i = 0; i < dataList.size(); i += 13) {

???????????????????????????????????? ItemStatReportisr = dataList.get(i);

???????????????????????????????????? data.add(isr);

??????????????????????????? }

??????????????????????????? this.data= data;

??????????????????????????? this.secondData= dataList;

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

?????????????????? }

???????? }

???????? publicboolean next() {

?????????????????? booleanhasNext = false;

?????????????????? if(this.iterator != null) {

??????????????????????????? hasNext= this.iterator.hasNext();

??????????????????????????? if(hasNext) {

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

??????????????????????????? }

?????????????????? }

?????????????????? returnhasNext;

???????? }

???????? publicObject getFieldValue(JRField field) throws JRException {

?????????????????? Objectvalue = null;

?????????????????? StringfieldName = field.getName();

?????????????????? ItemStatReportcurrentObj = (ItemStatReport) currentBean;

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

?????????????????? if(arr.length > 1) {

??????????????????????????? intseqNumber = Integer.parseInt(arr[1]);

??????????????????????????? ItemStatReportpositionObj = null;

??????????????????????????? for(ItemStatReport isr : secondData) {

???????????????????????????????????? if(isr.getSeqNumber() == seqNumber &&currentObj.getCompareCol().intValue() == isr.getCompareCol().intValue()) {

?????????????????????????????????????????????? positionObj= isr;

?????????????????????????????????????????????? break;

???????????????????????????????????? }

??????????????????????????? }

??????????????????????????? if(positionObj == null) {

???????????????????????????????????? thrownew RuntimeException("no found target data !");

??????????????????????????? }

??????????????????????????? value= getFieldValue(positionObj, field);

?????????????????? }else {

??????????????????????????? value= getFieldValue(currentBean, field);

?????????????????? }

?????????????????? returnvalue;

???????? }

}

这是我继承的两个JRAbstractBeanDataSource。

?

????

?

热点排行