读书人

FineReport使用 - 编程实现普通分组报

发布时间: 2012-10-08 19:54:56 作者: rapoo

FineReport应用 - 编程实现普通分组报表 | #报表

  我在 FineReport应用 - 程序网络报表Hello,World 一文中,阐述了编程实现基本报表的方法,在本文中,我将介绍如何创建一个带有数据集的分组数据报表。

?

设计目标

  设计一张报表,按付款方式分组查出订单编号和金额,最终效果如下图:


  FineReport使用 - 编程实现普通分组报表 | #报表

?

配置数据连接

  要使用数据集,需要先在服务器中配置数据连接。配置文件位于

?

  %FR_HOME%\WebReport\ WEB-INF\resources\datasource.xml

  以FRDemo为例,配置如下:

?

<?xml version="1.0" encoding="UTF-8"?><DatasourceManager>  <ConnectionMap>    <Connection name="FRDemo" driver="sun.jdbc.odbc.JdbcOdbcDriver" user="" password="" encryptPassword="true" />    </Connection>  </ConnectionMap></DatasourceManager>  

?

?

添加报表数据集

  在前文中,已经介绍过如何建立一个基本的程序报表,这时不再赘述。

?

  建立一个报表:

?

package fr.report;      import com.fr.base.Constants;import com.fr.base.FRContext;import com.fr.base.NameStyle;//.../**     * 普通分组报表 *  * http://localhost:8080/FineReport/ReportServer?reportlet=fr.report.GroupReportletDemo */     public class GroupReportletDemo implements Reportlet {          public Report createReport(ReportletRequest req) {              // 新建报表              WorkSheet workSheet = new WorkSheet();        return workSheet;    }}

?

  要添加数据集,在createReport(...)方法中添加如下代码:

?

try {      // 使用数据连接FRDemoDatabaseConnection dbConn = new NameDatabaseConnection("FRDemo");// 定义数据集,这里我们只取前20条记录     TableData tableData = new DBTableData(dbConn, "SELECT top 20 * FROM ORDERS");     // 将定义的数据集添加到报表中,命名为ds1           workSheet.putTableData("ds1", tableData);      } catch (Exception exp) {FRContext.getLogger().severe(exp.getMessage());    exp.printStackTrace();      }      

?

添加数据列

  表样:

  
  FineReport使用 - 编程实现普通分组报表 | #报表

  数据列:

  
  FineReport使用 - 编程实现普通分组报表 | #报表

?

  添加数据列:

?

// 建立扩展属性并指定为从上到下扩展CellExpandAttr cellExpandAttr = new CellExpandAttr();cellExpandAttr.setDirection(Constants.TOP_TO_BOTTOM);// 新建一个取自ds1数据集PAYMETHOD字段的数据列DSColumn a2data = new DSColumn();a2data.setDSName("ds1");a2data.setColumn(TableDataColumn.createColumn("PAYMETHOD"));// 设置数据配置为“分组 普通”a2data.setGrouper(new FunctionGrouper());// 将建立的数据列绑定到A2单元格中CellElement a2 = new DefaultCellElement(0, 1, a2data);// 应用扩展属性a2.setCellExpandAttr(cellExpandAttr);// 添加单元格到报表中workSheet.addCellElement(a2);
?

  依例设置b2、c2单元格,添加表头的方法前文已经介绍过,这里略过。

// 表头样式Style headStyle = NameStyle.getInstance("Head");// 表体样式Style cellStyle = NameStyle.getInstance("Cell");a1.setStyle(headStyle);a2.setStyle(headStyle);

?

完整代码
package fr.report;      import com.fr.base.Constants;import com.fr.base.FRContext;import com.fr.base.NameStyle;import com.fr.base.Style;import com.fr.data.TableData;import com.fr.data.impl.DBTableData;import com.fr.data.impl.DatabaseConnection;import com.fr.data.impl.NameDatabaseConnection;import com.fr.report.CellElement;import com.fr.report.DefaultCellElement;import com.fr.report.Report;import com.fr.report.WorkSheet;import com.fr.report.cellElement.CellExpandAttr;import com.fr.report.cellElement.TableDataColumn;import com.fr.report.cellElement.core.DSColumn;import com.fr.report.cellElement.core.FunctionGrouper;import com.fr.web.Reportlet;import com.fr.web.ReportletRequest;/**     * 普通分组报表 *  * http://localhost:8080/FineReport/ReportServer?reportlet=fr.report.GroupReportletDemo */     public class GroupReportletDemo implements Reportlet {          public Report createReport(ReportletRequest req) {              // 新建报表              WorkSheet workSheet = new WorkSheet();        try {              // 定义数据连接        DatabaseConnection dbConn = new NameDatabaseConnection("FRDemo");                    // 定义数据集              TableData tableData = new DBTableData(dbConn, "SELECT top 20 * FROM ORDERS");            // 添加数据集ds1                  workSheet.putTableData("ds1", tableData);                              // 表头样式            Style headStyle = NameStyle.getInstance("Head");            // 表体样式            Style cellStyle = NameStyle.getInstance("cell");                        // 添加表头        CellElement a1 = new DefaultCellElement(0, 0, "PAYMETHOD");        a1.setStyle(headStyle);    workSheet.addCellElement(a1);         CellElement b1 = new DefaultCellElement(1, 0, "ORDERID");    b1.setStyle(headStyle);    workSheet.addCellElement(b1);        CellElement c1 = new DefaultCellElement(2, 0, "AMOUNT");    c1.setStyle(headStyle);    workSheet.addCellElement(c1);        // 添加表体        CellExpandAttr cellExpandAttr = new CellExpandAttr();        cellExpandAttr.setDirection(Constants.TOP_TO_BOTTOM);            DSColumn a2data = new DSColumn();    a2data.setDSName("ds1");    a2data.setGrouper(new FunctionGrouper());    a2data.setColumn(TableDataColumn.createColumn("PAYMETHOD"));            CellElement a2 = new DefaultCellElement(0, 1, a2data);    a2.setCellExpandAttr(cellExpandAttr);    workSheet.addCellElement(a2);    a2.setStyle(cellStyle);     DSColumn b2data = new DSColumn();    b2data.setDSName("ds1");    b2data.setGrouper(new FunctionGrouper());    b2data.setColumn(TableDataColumn.createColumn("ORDERID"));            CellElement b2 = new DefaultCellElement(1, 1, b2data);    b2.setCellExpandAttr(cellExpandAttr);    workSheet.addCellElement(b2);    b2.setStyle(cellStyle);        DSColumn c2data = new DSColumn();    c2data.setDSName("ds1");    c2data.setGrouper(new FunctionGrouper());    c2data.setColumn(TableDataColumn.createColumn("AMOUNT"));            CellElement c2 = new DefaultCellElement(2, 1, c2data);    c2.setCellExpandAttr(cellExpandAttr);    workSheet.addCellElement(c2);    c2.setStyle(cellStyle);        } catch (Exception exp) {        FRContext.getLogger().severe(exp.getMessage());            exp.printStackTrace();              }              return workSheet;    }}

?

  要预览报表,访问

  http://localhost:8080/FineReport/ReportServer?reportlet=fr.report.GroupReportletDemo

读书人网 >编程

热点推荐