Java 在jasper报告中删除空元素并将非空元素保留在一个列表中

Java 在jasper报告中删除空元素并将非空元素保留在一个列表中,java,jasper-reports,ireport,Java,Jasper Reports,Ireport,我正在使用JRBeanCollectionDataSource作为子报表的数据源。列表中的每个记录都包含具有null或非null值的元素。这是我的POJO: public class PayslipDtl { private String earningSalaryHeadName; private double earningSalaryHeadAmount; private String deductionSalaryHeadName;

我正在使用JRBeanCollectionDataSource作为子报表的数据源。列表中的每个记录都包含具有null或非null值的元素。这是我的POJO:

public class PayslipDtl {

        private String earningSalaryHeadName;
        private double earningSalaryHeadAmount;

        private String deductionSalaryHeadName;
        private double deductionSalaryHeadAmount;

        String type;

public PayslipDtl(String salaryHeadName,
            double salaryHeadAmount, String type) {
        if(type.equalsIgnoreCase("Earning")) {
            earningSalaryHeadName = salaryHeadName;
            earningSalaryHeadAmount = salaryHeadAmount;
         } else { 
            deductionSalaryHeadName = salaryHeadAmount;
            deductionSalaryHeadAmount = salaryHeadAmount;
        }
    }

        //getters and setters
        }
根据“类型”,列表按如下方式填充:{“基本”,4755,null,0.0},{“HRA”,300,null,0.0},{null,0.0},{null,0.0,“员工PF”,925},{“医疗津贴”,900,null,0.0}等等

将isBlankWhenNull设置为true并使用“打印时间”表达式后,记录显示如下:

|Earning            |Amount|Deduction            |Amount|
--------------------|------|---------------------|------|
| Basic             | 4755 |                     |      |
| HRA               | 300  |                     |      |
|                   |      | Employee PF         |  925 |
| Medical Allowance | 900  |                     |      |
| Fuel Reimbursement| 350  |                     |      |
|                   |      | Loan                | 1000 |
---------------------------------------------------------
|Earning            |Amount|Deduction            |Amount|
--------------------|------|---------------------|------|
| Basic             | 4755 |  Employee PF        |  925 |
| HRA               | 300  |  Loan               | 1000 |
| Medical Allowance | 900  |                     |      |
| Fuel Reimbursement| 350  |                     |      |
---------------------------------------------------------
我希望将其显示为:

|Earning            |Amount|Deduction            |Amount|
--------------------|------|---------------------|------|
| Basic             | 4755 |                     |      |
| HRA               | 300  |                     |      |
|                   |      | Employee PF         |  925 |
| Medical Allowance | 900  |                     |      |
| Fuel Reimbursement| 350  |                     |      |
|                   |      | Loan                | 1000 |
---------------------------------------------------------
|Earning            |Amount|Deduction            |Amount|
--------------------|------|---------------------|------|
| Basic             | 4755 |  Employee PF        |  925 |
| HRA               | 300  |  Loan               | 1000 |
| Medical Allowance | 900  |                     |      |
| Fuel Reimbursement| 350  |                     |      |
---------------------------------------------------------
将isRemoveLineWhenBlank设置为true不起作用,因为不是整行为空,而是只有一行元素的子集为空

在贾斯珀有可能吗


我正在使用iReport Designer 5.0.1,兼容性设置为JasperReports3.5.1。

使用列表组件进行扣减/金额,您有一个视频教程介绍如何执行此操作

然后,列表组件上的扣减和金额字段需要以下选项:空时为空,空时为删除行


如果仍然有空行,请尝试将两个字段放在列表中的一个框架上,并为该框架标记这些选项

只有一个好的解决方案是,您必须创建单独的表,如下所示:

table employeeED:
srno int,
Earning varchar(50),
EarnAmount Double,
Deduction varchar(50)
DedAmount Double
然后,您必须在收入端插入所有收入,并在扣除端更新所有扣除额

    int i=1;
    rs.first();
    while(rs.next())
    {
         if(rs.getString("type").equals("Earning"))
            Insert into employeeEd (srno, Earning,EarnAmount) values     (i, rs('earning'), rs('eamt'))
    }

    int j=1;
    rs.first();
    while(rs.next())
    {
        if(rs.getString("type").equals("deduction"))
           update employeeEd set Deductions='"+rs('earning')+"',  DedAmount=" + rs('eamt') + " where srno="+j)
        j++;
    }
然后使用Employeed表作为数据源。
100%工作。

不确定这是否正是您想要的,但将其分为两个表,一个用于收入,一个用于扣除,不是更容易吗?你可以将它们放在一起以达到你想要的效果?@RoryB你是说两个单独的列表-这意味着使用两个子报告,对吗?还是你的意思是使用相同的列表。。你能告诉我怎么做吗,因为我以前从未在Jasper中使用过表。我想将子报表限制在最低限度,因为我将在同一个报表中使用几个其他子报表,这会导致它下面的其他元素出现各种对齐/定位问题。