DynamicJasper: использовать массив или список как источник данных без объектов - PullRequest
0 голосов
/ 29 июня 2019

Я использую DynamicJasper для создания отчетов, но единственная проблема, с которой я здесь сталкиваюсь, заключается в том, что вам нужно передать коллекцию объектов в качестве источника данных.
Но в моем случае мне нужно передать динамические столбцы и данные,пример: проверьте эту ссылку http://dynamicjasper.com/documentation-examples/getting-started/: в разделе " Создание простого отчета ", им передается список Product в качестве источника данных:

FastReportBuilder drb = new FastReportBuilder();
DynamicReport dr = drb.addColumn("State", "state", String.class.getName(),30)
.addColumn("Branch", "branch", String.class.getName(),30)
.addColumn("Product Line", "productLine", String.class.getName(),50)
.addColumn("Item", "item", String.class.getName(),50)
.addColumn("Item Code", "id", Long.class.getName(),30,true)
.addColumn("Quantity", "quantity", Long.class.getName(),60,true)
.addColumn("Amount", "amount", Float.class.getName(),70,true)
.addGroups(2)
.setTitle("November 2006 sales report")
.setSubtitle("This report was generated at " + new Date())
.setPrintBackgroundOnOddRows(true)
.setUseFullPageWidth(true)
.build();

JRDataSource ds = new JRBeanCollectionDataSource(TestRepositoryProducts.getDummyCollection());// here they give list of Products
JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dr, new ClassicLayoutManager(), ds);
JasperViewer.viewReport(jp);

В этомНапример, они использовали список сущности Product, где эта сущность имеет такие свойства, как state, branch и т. д., поэтому она может соответствовать заданным столбцам.

Но в моем случае яполучить динамические данные, это не список объектов, а массив данных (строки, целые числа, даты и т. д.)

мой вопрос: есть ли способ передать пользовательскийсписок JRBeanCollectionDataSource вместо списка предопределенных объектов?

1 Ответ

0 голосов
/ 29 июня 2019

решение состоит в том, чтобы использовать JRMapCollectionDataSource вместо JRBeanCollectionDataSource
таким образом, я могу передавать данные так:

List<Map<String, ?>> list = new ArrayList<>();
Map<String, Object> row = new HashMap<>();
row.put("state", "State value");
row.put("branch", "Branch value");
row.put("productLine", "Product line value");
// add the row to the list
list.add(row);

// and finaly pass the list to datasource
JRDataSource ds = new JRMapCollectionDataSource(list);
...