- 浏览: 147150 次
- 性别:
- 来自: 西安
最新评论
-
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 2956由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传 ... -
Cognos开发笔记
2012-02-07 00:43 1885前一段时间,完成了 ... -
python批量转换文件编码
2012-02-07 00:38 3215via: http://www.g2w.me/2012/02/ ... -
VIM中移动选中内容到备份文件
2012-02-07 00:33 1311在公司跟踪自己的工作计划时,我使用的 gtd 工具是 vim ... -
yuser
2011-06-08 18:19 0// ==UserScript== // @name ... -
Python的妙用,不解释
2011-06-02 17:32 1514import 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 1391URL 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 ...
相关推荐
FineReport设计器支持拖拽式操作,使得非编程背景的用户也能轻松创建复杂的数据报表。jar包是Java应用程序的集合,这个特定版本的jar包包含了2021年5月26日更新的功能和优化,确保了用户可以利用最新的功能进行报表...
### 报表开发工具FineReport中如何把报表放到网页中显示 #### 一、背景介绍 随着信息技术的发展,越来越多的企业倾向于使用基于浏览器/服务器(Browser/Server,简称BS架构)的系统来处理业务流程。这类系统通常...
此外,FineReport作为一个报表工具,它的很多高级功能往往需要通过脚本语言进行更细致的定制,这要求用户不仅要了解报表工具的界面操作,还要有一定的编程基础。 最后,在实现动态列报表时,还需要考虑报表的展示...
- **高效性**:利用FineReport的设计工具,用户可以实现无编码形式的报表设计,大大提高了工作效率。 - **灵活性**:支持数据的双向扩展,用户可以根据实际需求自由选择数据展示方式。 - **安全性**:提供完善的权限...
FineReport的特点在于其易用性和高效的报表设计方案,它采用了数据双向扩展、真正的无编码形式设计报表,用户不需要掌握复杂的编程技能即可设计出符合业务逻辑的报表,从而满足报表使用者的需求。此外,FineReport还...
### FineReport报表软件技术白皮书关键知识点解析 #### 一、产品概述 **FineReport**是一款集数据展示(报表)和数据录入(表单)功能于一体的报表工具软件,主要面向软件开发者。它能显著提升软件开发过程中的...
在现代Web报表开发中,报表打印是一个不可或缺的功能,尤其在一些需要将报表信息整理成纸质...在实际应用中,结合具体的业务场景和技术要求,对FineReport的打印功能进行相应的定制和优化,是实现高效报表打印的关键。
FineReport的拖拽式设计比水晶报表的编程方式更易于上手,而水晶报表则在复杂报表和集成度上有一定优势。 6. **应用领域**:FineReport广泛应用于金融、电信、制造、政府等行业的数据分析和报表制作,能有效提升...
FineReport是一款功能强大且国际通用的报表软件,广泛应用于企业的报表制作中。在日常工作中,我们经常需要制作以各种数据报表,来分析公司的经营业务的情况。今天,我们将为大家介绍FineReport软件的一些日常操作...
FineReport提供了丰富的脚本支持,尤其是JavaScript,允许用户在参数控件间设置逻辑关系,通过编程的方式实现复杂的报表控制逻辑。在本案例中,我们使用JavaScript来实现当某个参数控件(例如“用户名”)有值时,另...
FineReport允许开发者通过编程方式对单元格的格式进行自定义设置,包括字体样式、边框、背景色等,这为定制化报表提供了极大的灵活性。 ##### 3.3 将模板通过指定打印机打印 在某些应用场景下,需要将报表直接打印...
通过编程方式创建网络模板,可以实现动态生成报表模板,提高报表的灵活性。 ### 9. 读取模板报表 可以读取已存在的模板报表,以便进行编辑、更新或分析。 综上所述,FineReport 的二次开发功能提供了极大的灵活性...
### 报表工具FineReport正则表达式定义规则 #### 一、正则表达式概述 正则表达式是一种强大的文本处理工具,在多种编程语言中都有应用,它可以帮助我们完成字符串搜索、替换等一系列复杂的文本处理任务。在报表...
4. 编程实现动态比较:在JavaScript中处理用户输入,实时更新报表内容。 以下代码用于根据用户选择的日期范围动态更新对比报告: ```javascript var startDate = $('#startDateInput').val(); var endDate = $('#...
FineReport是一款流行的报表系统,通常被企业用来制作各类数据报表。在使用FineReport时,出于账户安全的考量,某些企业需要实施一个功能:确保同一个账号在任意时刻只能在一台计算机(客户端)上登录。为了实现这一...
在FineReport报表开发工具中,视图树超链是一种实现动态树节点和子模板联动的技术。该技术使得开发人员可以设计出一种报表布局,在报表的左侧显示一个树状结构的视图树,而右侧则显示相应的子模板内容。通过这种布局...
FineReport提供了直观的拖拽式报表设计界面,用户无需编程基础即可轻松创建各种复杂的报表,如表格、图表、仪表盘等。它支持多种数据源类型,包括数据库、Excel、Web服务等,能够快速连接并处理来自不同来源的数据。...
而Finereport则是在这两种报表工具的基础上进行了创新,实现了数据列和单元格的完美结合。用户可以通过简单的拖拽操作将数据列放置到单元格中,轻松构建复杂的报表格式。此外,Finereport还支持多源分片、不规则分组...
开发者可以创建程序化的网络模板,将报表与Web应用无缝集成,实现动态数据交互。 9. **读取模板报表** 可以通过编程方式读取已存在的模板报表,进行数据更新或进一步处理。 总的来说,FineReport的二次开发能力...