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