如何在Table组件的帮助下显示JRBeanCollectionDataSource数据?

我需要在Table组件(JasperReports)中显示JRBeanCollectionDataSource数据。

这是我的模板,ShowPerson.jrxml文件:

                                                                                            

我的POJO:

 public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

建筑报告主要类:

 public class OpenReport { public static void main(String[] args) throws JRException { Map peopleMap = new HashMap(); peopleMap.put("Sisco", 17); peopleMap.put("Eve", 19); peopleMap.put("John", 20); peopleMap.put("George", 21); peopleMap.put("Steve", 18); ArrayList dataList = new ArrayList(); for(Map.Entry personMap : peopleMap.entrySet()) { Person person = new Person(); person.setName(personMap.getKey()); person.setAge(Integer.valueOf(personMap.getValue().toString())); dataList.add(person); } JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList); Map parameters = new HashMap(); parameters.put("INFO", "Hello"); JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper"); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, beanColDataSource); JFrame frame = new JFrame("Report"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new JRViewer(jasperPrint)); frame.pack(); frame.setVisible(true); } } 

1.从服务器发送数据源作为参数,并使用不同的报告填充报告(可以为空)。

 JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList); Map parameters = new HashMap(); parameters.put("INFO", "Hello"); parameters.put("DS1", beanColDataSource); JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper"); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 

2.在JRBeanCollectionDataSource类型的报告中删除一个新参数

  

3.设置TableDatasource以使用$ P {DS1}参数。

       ..... 

4.Declare表数据集1中的字段(名称,年龄)。

5.在表格中,在DetailBand中,在每列中添加一个TextField,其中包含相应的字段(分别为$ F {name}和$ F {age})。

@laura:尝试将TableDatasource设置为使用$ P {DS1}参数时出现新错误。 net.sf.jasperreports.engine.JRBeanCollectionDataSource无法解析为某个类型

现在,我找到了解决方案,也许不是最好的解决方案。

 Map parameters = new HashMap(); parameters.put("INFO", "Hello"); parameters.put("DS1", dataList); JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper"); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 

将$ P {DS1}的类修改为java.util.Collection或java.util.List

并将表数据源设置为

 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{DS1})