在jasper报告中删除null元素并将非null元素保留在列表中

时间:2013-04-19 09:08:06

标签: java jasper-reports ireport

我使用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},{“医疗津贴”,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不起作用,因为它不是整个行是空白的,而只是行的元素的子集为空。

贾斯珀有可能吗?

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

2 个答案:

答案 0 :(得分:0)

使用List组件作为扣除/金额,here您有关于如何执行此操作的视频教程。

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

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

答案 1 :(得分:0)

只有一个好的解决方案,你必须创建单独的表:

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%工作。