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