【问题标题】:Jasper Reports: Subeport showing null values in Main Report, datasource is a java ListJasper Reports:子报告在主报告中显示空值,数据源是一个 java 列表
【发布时间】:2019-12-04 06:34:24
【问题描述】:

我有什么

我的主报告显示我的子报告中的所有值都是空的。

我想要什么

我通过名为 subData 的参数从 MainReport 将数据传递给 subReport,如下面的 MainReport JRXML sn-p 所示。

注意:它是一个列表

我在MainReport中的subReport sn-p如下,dataSource表达式明明是“$P{subData}”

我的主 java 类通过如下所示的参数(名为 subDataOrion)传递一个 List 的实例(名为 subData)。

public class SubRepoExample {

public static void main(String[] args) throws JRException {
   SubRepoExample repo = new SubRepoExample();
   repo.combineMasterAndSubreport();
}

public void combineMasterAndSubreport() throws JRException{

    JasperReport main = JasperCompileManager.compileReport("src/subrepoexample/masterReport.jrxml");

    JasperReport sub = JasperCompileManager.compileReport("src/subrepoexample/subReport.jrxml");



   //create a list for holding the subreport object

    //SubreportWrapper subDataWrap = new SubreportWrapper();

    List<SubreportObject> subData = new ArrayList();
    //subData.add(subDataWrap.getSubData());
    subData.add(new SubreportObject("Kevin",20));
    subData.add(new SubreportObject("Jane",20));
    subData.add(new SubreportObject("Mike",20));
    subData.add(new SubreportObject("Simon",20)); 
    //subData.add(new SubreportObject("Naomi",25));
    //subData.add(new SubreportObject("Pat",20));


    //SubreportWrapper subDataWrap = new SubreportWrapper();

    //List<SubreportObject> subData = subDataWrap.getSubData();

    Map para = new HashMap();
    //pass the report itself through a parameter
    //para.put("SUBREPORT", sub);
    //pass the list to parameter
    //JRDataSource subx = new JRBeanCollectionDataSource(subData);
    para.put("subDataOrion",subData);

    //JasperPrint jp = JasperFillManager.fillReport(sub, para,new JRBeanCollectionDataSource(subData));      
    //JasperPrint jp = JasperFillManager.fillReport(main, para,new JRTableModelDataSource(createMasterData()));


     JasperCompileManager.compileReportToFile(
            "src/subrepoexample/subReport.jrxml", 
            "src/subrepoexample/subReport.jasper"); 


    JasperPrint jp = JasperFillManager.fillReport(main, para,new JRTableModelDataSource(createMasterData()));
    JasperViewer.viewReport(jp, false);  

}

 public DefaultTableModel createMasterData(){

    String [] cols = {"COL_1","COL_2","COL_3"};
    Object[][] data = {{"Data","Data","Data"},
                       {"Data","Data","Data"},       
                       {"Data","Data","Data"},   
                       {"Data","Data","Data"},   
                       {"Data","Data","Data"},  
                      };
    DefaultTableModel dtm = new DefaultTableModel(data,cols);

return dtm;}

}

创建 subReport 对象的 SubReport 类

public class SubreportObject {
  String name;
  int age;

 public SubreportObject(String name,int age){
     this.name = name;
     this.age = 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;
     }

  }

我知道这里有两个问题,数据的排列问题,因为子报表数据是混合的。或与第一个屏幕截图所示的主要报告数据一起打乱。我认为这可以通过小组来解决,这不是我的问题。

我的问题

我需要首先消除“空”值,以便进入使用组表达式的下一阶段。被困在这里,不知道出了什么问题?至少我问过this question 并且至少出现了'null'值,早些时候它们完全没有出现。

为什么List中的数据显示为'null',单独编译时编译的很好。

编辑 1:

很抱歉在这个问题的早期版本上马虎。谢谢大家。

编辑 2:

我已经添加了如下所示的 JRBeanCollection

甚至将参数类更改为 JRDataSource,如下所示

但仍然显示空值..???

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    您缺少JRBeanCollectionDatasource,List 本身不是数据源,除非它实现了 JRDataSource 接口,否则应由 JRDataSource 包装/适配。

    【讨论】:

    • 感谢您的回答,但报告仍然显示空值。请查看上面的EDIT 2
    • 您在 Java 中设置 subDataOrion 参数,但在 jrxml 中声明 subData 参数。在dataSourceExpression 中两者必须相同。
    • 您说得对,先生!虽然现在它只有第一行显示数据,其他 r 仍然为 null ,我认为将两者捆绑在不同的组中可能有助于解读它们。如果有一个不使用组的快速提示,我将不胜感激。谢谢一百万。
    • 不需要分组。能发一下jrxml吗?
    • 无法发布JRXML,复制功能已禁用,但感谢您的帮助
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多