JasperReports:将列表列表作为数据源传递

时间:2012-07-12 23:45:58

标签: list jasper-reports

我需要使用不同对象的列表填充一些子报表。基本上可以说我有以下几点:
二手车的子报告
关于新车辆的子报告

我创建了一个车辆bean类,其变量为字符串,并为其创建getter和setter方法。然后在我的数据源中,我传递List<List<String>>作为detailRows。 detailRows包含新车辆列表和二手车辆列表。所以我要说,我在数据源中传递detailRows 问题是我如何将这两个列表传递给两个子报告?我可以用吗 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{newVehiclesList})作为子报表1和的报表的数据源 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{usedVehiclesList})作为子报告2的数据源? 除了我提到的之外还有什么需要做的吗?我需要创建并传递任何变量吗?是否正确使用了上面列出的列表列表,还是$F{detailRows}.get(0)

我在主报告中创建了一个字段detailRows作为类型列表。然后,我将以下内容传递给子报表数据源表达式new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{detailRows} 有什么方法可以将newVehiclesList从detailRows传递到子报告吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

选择您的SubReport,您可以将属性“连接类型”设置为“使用数据源表达式”,并在属性“数据源表达式”中设置此项:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{yourFieldHere})

你的“yourFieldHere”是一个列表(不要忘记将你的字段属性中的“Field Class”设置为java.util.List)

答案 1 :(得分:1)

好的,那么你需要用Field类创建两个字段作为java.util.List,每个列表一个(newVehiclesList和usedVehiclesList)。

将您的两个子报告放在任何位置,然后单击每个子报告执行以下步骤:

将“连接类型”更改为“使用数据源表达式”,然后将“数据源表达式”更改为新的net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($ F {yourField})

完成。

ps:为了使用newVehiclesList和usedVehiclesList中的字段,你必须在他们自己的subReports中创建它们。

答案 2 :(得分:0)

我和你有同样的问题,我使用标签List of jasper解决了它,我在我的java类中使用了datasource,例如: parameter.put(“MyList”,new JRBeanCollectionDataSource(ListObjects)); 在JRXML中

在贾斯珀的苍白中,选择标签LIST并拖放你的关系 选择后

  • 创建新数据集
  • 从连接创建新数据集......
  • 在数据适配器中选择新的数据适配器 - javabeans的集合
  • 使用JRDatasource表达式
  • 进入lis参数并选择列出op对象(MyList)

现在转到jasper和   - 数据集属性   - 编辑和查询过滤器......   - javabean   - 搜索你的课(我使用eclipse,所以很容易搜索我的课)   - 添加要使用的字段