我正在尝试使用JRBeanCollectionDataSource
创建报告,但我遇到了问题。我需要使用JTable
中的复选框打印两条记录,但JasperReport中只显示一条记录。
这是我的代码:
for (int i = 0; i < model.getRowCount(); i++) {
for(int j=0;j< model.getColumnCount();j++){
Boolean value = (Boolean) model.getValueAt(i, 11);// check state
if (value) {
System.out.println(model.getValueAt(i, j));// second column value
struk=new ArrayList<ListTrxPrint>();
ListTrxPrint trx=new ListTrxPrint();
trx.setId(model.getValueAt(i, 0).toString());
trx.setMsisdn(model.getValueAt(i, 4).toString());
trx.setExecute_date(model.getValueAt(i, 3).toString());
trx.setNominal(model.getValueAt(i, 6).toString());
trx.setSales_price(model.getValueAt(i,7).toString());
trx.setUser_name(model.getValueAt(i, 1).toString());
struk.add(trx);
bean=new JRBeanCollectionDataSource(struk);
}
}
}
try{
JasperDesign design=JRXmlLoader.load("C:\\Users\\PPS SAMSUL\\Documents\\RPTStruk.jrxml");
JasperReport jReport=JasperCompileManager.compileReport(design);
JasperPrint jPrint=JasperFillManager.fillReport(jReport, null,bean);
JasperViewer.viewReport(jPrint, false);
JasperViewer.getWindows();
}
catch(Exception e){
e.printStackTrace();
}
我的代码出了什么问题?
答案 0 :(得分:0)
您需要将ArrayList
和JRBeanCollectionDataSource
移出您的循环,现在您每次循环时重新创建,此外我看不到任何需要循环的内容在所有列上。
代码可能类似于:。
struk=new ArrayList<ListTrxPrint>();
for (int i = 0; i < model.getRowCount(); i++) {
Boolean value = (Boolean) model.getValueAt(i, 11);// check state
if (value) {
ListTrxPrint trx=new ListTrxPrint();
trx.setId(model.getValueAt(i, 0).toString());
trx.setMsisdn(model.getValueAt(i, 4).toString());
trx.setExecute_date(model.getValueAt(i, 3).toString());
trx.setNominal(model.getValueAt(i, 6).toString());
trx.setSales_price(model.getValueAt(i,7).toString());
trx.setUser_name(model.getValueAt(i, 1).toString());
struk.add(trx);
}
}
bean=new JRBeanCollectionDataSource(struk);