2012-07-23 165 views
0

好的。這裏有一個很大的新問題,但我一直試圖找到一個解決方案。將對象的ArrayList轉換爲jasperreports的對象數組

使用示例我發現here我能夠在我的報告中獲得一個customdatasource工作。

但是......的例子使用這段代碼的實際對象pased數據

private Object[][] data = 
    { 
    {"Berne", new Integer(22), "Bill Ott", "250 - 20th Ave."}, 
    {"Berne", new Integer(9), "James Schneider", "277 Seventh Av."}, 
    {"Boston", new Integer(32), "Michael Ott", "339 College Av."}, 
    {"Boston", new Integer(23), "Julia Heiniger", "358 College Av."}, etc... 

不幸的是java會不會允許動態地添加到該對象和數組作爲報表數據總是要變得動態,它變得毫無用處。

我已經嘗試了自定義數據類,我添加到一個ArrayList像

ArrayList<myDataObject> a = new ArrayList<myDataObject>(); 

for(int x=0;x<5;x++){ 
    myDataObject myl = new myDataObject("asdasd",Integer.toString(x)); 
    a.add(myl); 
} 

但是,(這裏的newbee部分),我似乎無法弄清楚如何將其轉換爲兩個元素一個簡單的Object [] [],碧玉期望。

下面是我使用

import java.util.ArrayList; 
import net.sf.jasperreports.engine.JRDataSource; 
import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JRField; 

public class CustomData implements JRDataSource { 

    private Object data[][]; 
    private int index; 


// public CustomData(Object o[][]) { 
//  index = -1; 
//  this.data = o; 
// } 
    public CustomData(ArrayList <Object> a) { 
     index = -1; 
     this.data = (Object)a.toArray(); 
    } 

    public boolean next() throws JRException { 
     index++; 
     return (index < data.length); 
     //throw new UnsupportedOperationException("Not supported yet."); 
    } 

    public Object getFieldValue(JRField field) throws JRException { 
     Object value = null; 
     String fieldName = field.getName(); 

     if ("aName".equals(fieldName)) { 
      value = data[index][0]; 
     } 
     else if ("aNumber".equals(fieldName)) { 
      value = data[index][1]; 
     } 

     return (String)value; 
//  throw new UnsupportedOperationException("Not supported yet."); 
    } 

} 

任何幫助將是巨大的數據類。

回答

1

通過列表簡單迭代並將其添加到二維數組會浮現在腦海中:

public static void main(String[] args) { 
    ArrayList<MyDataObject> a = new ArrayList<MyDataObject>(); 

    for(int x=0;x<5;x++){ 
     MyDataObject myl = new MyDataObject("asdasd", Integer.toString(x)); 
     a.add(myl); 
    } 

    int aSize = a.size(); 
    Object[][] thingy = new Object[aSize][2]; 
    for(int i = 0; i < aSize; i++) { 
     MyDataObject mdo = a.get(i); 
     thingy[i][0] = mdo.getS(); 
     thingy[i][1] = mdo.getI(); 
    } 
} 
+0

YES。這工作!我無法'添加'到Object [] [],所以我被卡住了,但是...'Object [] []'必須預先分配空間,就像Array一樣。得到它了。說得通。謝謝!! – jeff 2012-07-23 21:04:10

+0

不客氣。如果您認爲我的回答對您有幫助,請不要忘記點擊接受。實際上,Object [] []僅僅是一個數組(模仿2維數組)的對象引用數組。 – 2012-07-23 21:06:08