Java 在jasper报告中删除空元素并将非空元素保留在一个列表中
我正在使用JRBeanCollectionDataSource作为子报表的数据源。列表中的每个记录都包含具有null或非null值的元素。这是我的POJO: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;
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中使用过表。我想将子报表限制在最低限度,因为我将在同一个报表中使用几个其他子报表,这会导致它下面的其他元素出现各种对齐/定位问题。