ireport中的子表问题

  • 使用ireport创建含有子表的报表,在web工程中使用
  • 首先创建实体类,在这里创建两个实体类,分别为Building,Room,他们的关系为一个Building对象中含有多个Room对象,所以Room对象为子表的数据源,Building对象中含有一个Room对象的集合作为自身的成员变量。代码如下:

Room实体类:

package test.allan.modular;

public class Room {
 private String roomId; //房间编号
 private String roomName; //房间名称
 private int size; //房间大小
 
 public String getRoomId() {
  return roomId;
 }
 public void setRoomId(String roomId) {
  this.roomId = roomId;
 }
 public String getRoomName() {
  return roomName;
 }
 public void setRoomName(String roomName) {
  this.roomName = roomName;
 }
 public int getSize() {
  return size;
 }
 public void setSize(int size) {
  this.size = size;
 }
}

 

Building实体类:

package test.allan.modular;

import java.util.List;

public class Building {
 private String name; //建筑名称
 private List rooms; //建筑里面的房间,是一个集合,也是子表的数据院
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public List getRooms() {
  return rooms;
 }
 public void setRooms(List rooms) {
  this.rooms = rooms;
 }
}

  • 创建完实体类后在iReport中创建对应的jrxml文件,主表名为building.jrxml,子表名为room.jrxml,选择JavaBean Datasource作为数据源,再在iRport的工具->选项菜单中配置JavaBean的数据来源,此时选择对应工程的class目录,如图:



   

    编辑building.jrxml文件,首先选择JavaBean作为数据来源,再在Class name 中输入类的全称,选中Building类中的属性,点击 Add selected field(s),属性就会出现在下面的框中,再选择OK


 

编辑room.jrxml文件,首先选择JavaBean作为数据来源,再在Class name 中输入类的全称,,点击 Add selected field(s),属性就会出现在下面的框中,再选择OK


 ireport中的子表问题_第1张图片

  • 再在building.jrxml文件中拖入子表控件,选择空的数据源,如图

ireport中的子表问题_第2张图片

 

  • 继续编辑building.jrxml文件,在组件面板中选择Subreport properties,然后在Subreport Expression中输入子表的路径,在Expression Class中选择java.lang.String,在Connection type中选择Use a datasource expression,最重要的是在要将Data Source Expression改为自己定义的那个属性(将先前那个值给删掉,再选择自己定义的属性),这里是rooms,如图:


 ireport中的子表问题_第3张图片

  • 还有一步很重要,就是要在主表(building.jrxml)中选中Parameters,再选择SUBREPORT_DIR,然后在属性面板中编辑Field Class

这一步可以说是最重要的,要将rooms的属性改为org.apache.struts2.views.jasperreports.ValueStackDataSource,这是最重要的,如图:

ireport中的子表问题_第4张图片

  • 将上述操作处理完后,还需要在导入几个包,因为上面定义的那个类型ireport中是没有的,需要导入的包有两个,一个是struts2-jasperreport-plugin.jar,还有一个是x-work.jar,版本自己选择,也是在classpath中配置,如图:


ireport中的子表问题_第5张图片

  这样就可以了。

你可能感兴趣的:(ireport中的子表问题)