在jasper报告的列表中删除空元素并保留非空元素



我使用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
        }

根据"类型",按如下方式填充列表:{"Basic", 4755, null, 0.0}, {"HRA", 300, null, 0.0}, {null, 0.0, "Employee PF", 925}, {"Medical Allowance", 900, null, 0.0},等等…

将isBlankWhenNull设置为true并使用"Print when"表达式后,记录显示如下:

|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不起作用,因为它不是整行为空,而是一行元素的子集为空。

在Jasper有可能吗?

我使用的是iReport Designer 5.0.1,兼容性设置为JasperReports3.5.1.

使用List组件来扣除/金额,这里有一个如何做到这一点的视频教程。

那么,list组件上的扣除和金额字段需要以下选项:空时为空白,空时为Remove line。

如果这仍然给你空行,试着把这两个字段放在列表内的框架上,并为框架标记这些选项。

唯一好的解决方案是,您必须创建单独的表

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++;
    }

则使用employeeED表作为数据源。100%工作。

相关内容

最新更新