- 浏览: 144162 次
- 性别:
- 来自: 西安
最新评论
-
yukang1:
怎么关闭vbs呢 唉
利用VBScript在隐藏窗口中运行应用程序 -
greatghoul:
hanmiao 写道好用,我在 51CTO 上也找到了类似的解 ...
JFreeChart中文乱码和文字模糊问题的通用解决方案 | #java #chart -
hanmiao:
好用,我在 51CTO 上也找到了类似的解决方案,也是通过自定 ...
JFreeChart中文乱码和文字模糊问题的通用解决方案 | #java #chart -
janecd:
...
java BoxLayout布局心得 | #java #swing -
janecd:
java BoxLayout布局心得 | #java #swing
我在 FineReport应用 - 程序网络报表Hello,World 一文中,阐述了编程实现基本报表的方法,在本文中,我将介绍如何创建一个带有数据集的分组数据报表。
设计目标
设计一张报表,按付款方式分组查出订单编号和金额,最终效果如下图:
配置数据连接
要使用数据集,需要先在服务器中配置数据连接。配置文件位于
%FR_HOME%\WebReport\ WEB-INF\resources\datasource.xml
以FRDemo为例,配置如下:
<?xml version="1.0" encoding="UTF-8"?> <DatasourceManager> <ConnectionMap> <Connection name="FRDemo" class="com.fr.data.impl.JDBCDatabaseConnection"> <DatabaseAttr /> <JDBCDatabaseAttr url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\FineReport6.5\WebReport\WEB-INF\resources\data\FRDemo.mdb" 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 { // 使用数据连接FRDemo DatabaseConnection 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(); }
添加数据列
表样:
数据列:
添加数据列:
// 建立扩展属性并指定为从上到下扩展 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单元格,添加表头的方法前文已经介绍过,这里略过。
注意
new DefaultCellElement(col, row, value)中,col和row分别为列和行的索引,如0,0表示a1,1,1表示B2
美化报表
通常为了美观,我们会给不同的单元格加上样式,FineReport为我们提供了几种预定义的样式,
见:%FR_HOME%\WebReport\WEB-INF\resources\config.xml
要使用预定义的样式,只需要加入如下的代码即可:
// 表头样式 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
发表评论
-
python发送文件夹内容到邮箱
2012-02-07 00:48 2906由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传 ... -
Cognos开发笔记
2012-02-07 00:43 1841前一段时间,完成了 ... -
python批量转换文件编码
2012-02-07 00:38 3172via: http://www.g2w.me/2012/02/ ... -
VIM中移动选中内容到备份文件
2012-02-07 00:33 1261在公司跟踪自己的工作计划时,我使用的 gtd 工具是 vim ... -
yuser
2011-06-08 18:19 0// ==UserScript== // @name ... -
Python的妙用,不解释
2011-06-02 17:32 1461import base64 filelist = [ ... -
config.js
2011-06-02 17:31 0写道 U0VSVkVSID0gJ1xcXFwxMC4xND ... -
util.js
2011-06-02 17:30 0写道 Ly8g5qih5p2/5YyW5a2X56ym5L ... -
teamtalk.js
2011-06-02 17:29 0写道 KGZ1bmN0aW9uKCkgewogICAgdm ... -
TeamTalk.hta
2011-06-02 17:28 0写道 PGh0bWw+CjxodGE6YXBwbGljYX ... -
JavaScript目录遍历
2011-05-20 17:18 0// 代码行数统计工具 var fso = new Ac ... -
巧用Scanner读取输入流中的所有内容
2011-05-18 14:51 1348URL url = new URL("http:// ... -
python备份表
2011-05-06 16:18 0import pyodbc import os impor ... -
Python DataViewListCtrl用法
2011-05-06 16:15 0import wx.dataview as dv sel ... -
python 对非规范化json的处理
2011-05-06 16:11 0json 格式: [{name: '浪人情歌', autho ... -
encode py
2011-04-01 17:32 0import base64 import os ... -
HTA无标题窗口拖动
2011-03-23 10:57 0var moveing = false,x,y; tit ... -
python db manager
2011-03-22 20:03 0#!/usr/bin/env python # coding: ... -
pyodbc with statement
2011-03-09 20:53 0class DataProvider(object): ... -
fdsafdsa
2011-03-03 17:43 0#!/usr/bin/env python # coding ...
相关推荐
SPRINGBOOT-finereport代码-需要修改文件后缀名,其内比较实用而且可应用于实际项目,比较有参考价值
3.1.1. 普通报表 9 3.1.2. 填报报表 9 3.2. 报表设计 9 3.2.1. 新建模板 9 3.2.2. 整体设置 10 3.2.3. 模板设计 22 3.2.4. 参数设计 40 3.3. 报表效果预览 50 3.3.1. 设计器预览 50 3.3.2. 分页预览 51 3.3.3. 填报...
动态列报表,使用参数控件联动筛选需要展示的列的数据,该资源包下包含了已经完成的模板和JS以及所使用的函数公式。
FineReport报表软件功能编辑 自推出市场以来,FineReport得到多方用户的认可,同时也在不断的改良与升级中变得更加易用,功能更 加强大,也将会给用户带来更新更好的体验。 FineReport报表工具提供了易用且高效率的...
FineReport 设计器 jar包 2021-05-26
在MIS 系统的设计中, 报表输出是不可缺少的功能, FineReport 是一个非常不错的报表工具。研究了通过FineReport 设计动态列报表的技术要点。
报表开发工具FineReport中如何把报表放到网页中显示
FineReport帮助文档---制作经验分享
报表开发工具FineReport中如何把报表放到网页中显示
本代码主要开源了java报表工具中报表调用部分的代码,通过该开源代码,你可以了解报表工具的内部原理,掌握国内主流java报表工具的各类接口使用方法,并运用该接口对软件产品或项目中的个性化的需求进行二次开发。...
在报表开发工具FineReport中,报表的执行过程大体可分为两步:1、报表计算;2、页面转换。
智能报表软件
本资源内容是员工信息填报报表,资源内包含帆软cpt模板文件
finereport报表教程 finereport报表教程 finereport报表教程 finereport报表教程
报表开发工具finereport普通报表的app自适应方案
企事业单位这些最终用户应用FineReport报表,可以简单的应用多业务系统数据,集中数据于一张报表,让更多数据应用于经营分析和业务管控中。通过FineReport数据决策系统,用户可以搭建报表中心,实现报表的统一访问和...
fcrp 答案 有问题欢饮咨询 yzq_112266 !
资源内包含帆软cpt模板文件,有需要的小伙伴可以自行下载使用,如需查看视频讲解可以访问西瓜视频:https://www.ixigua.com/home/2506516376848260/video/?preActiveKey=pseries&list_entrance=userdetail ...
若您的模板内容明明是一页就可以显示出来,但是分页预览时却出来两页,而第二页却没有数据是空白页,原因是您的模板中有多余的空白格没有删除。这种情况可能由两种原因引起,一种是空白单元格导致使其有多余的空白页...
FineReport报表制作流程图解,里面详细介绍了怎样制作报表,有详细的图例。