我有不同的列,所以我想在一个jasper报告中显示动态列。但主要的是列是不同的。
是否有可能在jasper报告中编写java代码?
请帮我解决这个问题。
答案 0 :(得分:1)
是..你可以使用Dynamic Jasper。您可以添加动态列并根据需要设置所有参数以进行配置。它简单易行。在这里,我给出了一些有用的类名,您可以通过它们实现相同的目标。
答案 1 :(得分:0)
您无需在java代码中执行此操作。
您可以在jrxml文件中执行此操作。
例如: 您需要根据条件在一个jrxml文件中显示2列。
两个字段是CASH RECIEPT,CARD RECIEPT。
将它们放在jrxml文件中几乎相同的位置,其中包含站点差异以确保避免错误(红色标记错误。)
首先接受CASH RECEIPT
右键单击它并查看其属性。
然后找到Print When Expression(这是您可以应用条件的地方,应该为true来打印列。)并转到它。
添加你的表达(条件。) 它是这样的 $ F {card} .equals(“0”)?真假 这必须根据你的情况改变。 这里发生的事情是,当jrxml文件中卡片字段的值为零时,它将打印CASH RECEIPT列
对CARD RECEIPT做同样的事情。
print when expression is as follow
$F{card}.equals( "1" ) ? true : false
What will do this is ,CARD RECEIPT will be Printed when card field is hold the value 1.
答案 2 :(得分:0)
我使用了DynamicReports,有一些选项
https://dynamicreports.lbayer.com/examples/examples-overview/
您可以在运行时添加列。
private void printReport() throws DRException {
AdhocConfiguration configuration = new AdhocConfiguration();
AdhocReport report = new AdhocReport();
// column name list
List<String> columnList = new ArrayList<>();
columnList.add("Column 1");
columnList.add("Column 2");
columnList.add("Column 3");
columnList.add("Column ...");
columnList.add("Column n");
for (String column : columnList) {
AdhocColumn adhocColumn = new AdhocColumn();
adhocColumn.setTitle(column);
adhocColumn.setName(column);
report.addColumn(adhocColumn);
}
configuration.setReport(report);
String[] myArray = new String[columnList.size()];
DRDataSource dataSource = new DRDataSource(columnList.toArray(myArray));
dataSource.add("data1", "data2", "data3", "data ...", "data n");
dataSource.add("data1", "data2", "data3", "data ...", "data n");
JasperReportBuilder reportBuilder = AdhocManager.createReport(configuration.getReport());
reportBuilder.setDataSource(dataSource);
reportBuilder.show();
}