0

Ok。ここでの大きな初心者の質問ですが、私は解決策を見つけようとして無駄に努力してきました.

ここで見つけた例を使用して、レポートでカスタムデータソースを機能させることができました。

しかし...この例では、データとして渡される実際のオブジェクトにこのコードを使用しています

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 ではその Object 配列に動的に追加することはできず、レポート データは常に動的になるため、役に立たなくなります。

次のように ArrayList に追加する 2 つの要素を持つカスタム データ クラスを試しました。

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の部分です)これをjasperが期待する単純な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.");
    }

}

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

リストを単純に反復処理して 2 次元配列に追加すると、次のようになります。

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();
    }
}
于 2012-07-23T20:16:15.367 に答える