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.");
}
}
どんな助けでも素晴らしいでしょう。