如何利用报表工具FineReport实现报表列的动态展示-阿里云开发者社区

开发者社区> 技术小阿哥> 正文

如何利用报表工具FineReport实现报表列的动态展示

简介:
+关注继续查看

相信动态列的实现困扰了很多人,大数据量,多字段的加载将会非常耗时,数据又做不到真正的动态灵活。现有的方式都是通过变向的隐藏等方式来实现。

那该如何解决呢?这里分享帆软报表设计器FineReport的实现方案,结合实际工作中遇到的的相关内容。

我本地常用数据库是MYSQL,所以比较了解一点,所以实现方式也是基于mysql的。首先了解一下MySQL自带的information_schema数据库使用。

大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个 information_schema数据库。information_schema数据库是做什么用的呢,使用WordPress博客的朋友可能会想,是不是安装模板添加的数据库呀?看完本片文章后,你就会对information_schema数据库有所了解。

information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

在 MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

information_schema数据库表说明:

  •  SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。

  •  TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。

  • COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

  • STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。

  •  USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。

  • SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。

  • TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。

  • COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。

  • CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。

  • COLLATIONS表:提供了关于各字符集的对照信息。

  • COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOWCOLLATION的前两个显示字段。

  • TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。

  • KEY_COLUMN_USAGE表:描述了具有约束的键列。

  • ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。

  • VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。

  • TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表

扩展的应用

  • 查看某个数据库表的记录数

selecttable_schema,table_name,table_rows from tables where TABLE_SCHEMA = '数据库名称' order by table_rowsdesc;

  • 查看数据库所占空间

selectconcat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB, 

concat(round(sum(index_length/1024/1024),2),'MB')as index_length_MB 

frominformation_schema.tables where 

table_schema='数据库名';

  • 查看某个表所占空间

selectconcat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size,

concat(truncate(sum(max_data_length)/1024/1024,2),'MB')as max_data_size,

concat(truncate(sum(data_free)/1024/1024,2),'MB')as data_free,

concat(truncate(sum(index_length)/1024/1024,2),'MB')as index_size

frominformation_schema.tables where TABLE_NAME = '表名';

看完之后相信可能还是有点疑惑。就是说mysql中有一个系统库information_schema。这个库中存放着mysql数据库的数据库实例名,表名称,表注释,字段名称,字段注释等等等等。而这个库的存在为我们动态列的实现就提供了一个基础。(其余的数据库oracle、sqlserver、db2等也有类似的存在。)

然后我们继续回到主题。我在本地建立了一个测试库reporttest,测试表report。在mysql库中新建一个库reporttest(或者使用已经存在的库,但是如果使用已经存在的,那么报表内部sql内容就需要更改。所以最好新建一个),然后用类似navicat的工具运行我提供的reporttest.sql文件,即可建表并且导入数据,然后刷新即可,此时数据准备完成。

设计器创建数据连接test,填写对应的数据库信息,测试成功即OK。

此时,库名称为reporttest,表名称为report,数据连接test。这时直接预览动态列实现方案.cpt。

 

可以很清晰的看到效果,选择哪个列,它就只查询那个列,只展示哪个列的数据,这就是动态列的实现方案。大家可以依据我的逻辑,替换成自己的数据连接库、表数据进行测试使用体验!



本文转自 雄霸天下啦 51CTO博客,原文链接:http://blog.51cto.com/10549520/1857788,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)
原文:ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表) 6月27日京东商城发布了中国电子商务领域首张电子发票,同时宣布相关系统正式上线,这标志着中国电子商务的步伐又向前迈出了重要的一步。
898 0
ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
原文:ActiveReports 报表应用教程 (8)---交互式报表之动态过滤 用户可以使用ActiveReports参数 (Parameters)集合把数据提供给报表中的文本框或图表,也可以选择数据的一个子集显示到报表的特定区域,或者是把数据从主报表象子报表传递。
735 0
ActiveReports 报表应用教程 (9)---交互式报表之动态排序
原文:ActiveReports 报表应用教程 (9)---交互式报表之动态排序 在 ActiveReports 中除了提供对数据源进行排序的功能之外,还提供了最终用户排序功能,最终用户可以对报表进行区域内排序和整个数据源排序,结合数据钻取、过滤等功能可以让用户更方便地分析报表数据。
671 0
Grid++Report实现Web报表
<span style="font-family:楷体; font-family:楷体; font-size:19px; line-height:27px; widows:auto">     最早接触报表是在机房收费系统中,那时候还是在C/S模式下,所以可以直接在窗体上添加报表。而现在,已经转战B/S模式下。本篇博客将介绍如何实现Web报表。</span> <div style="fo
2981 0
Crystal Reports拉报表报错:Error detected by database DLL
问题描述: 最近在使用Crystal Reports打印报表时,提示错误信息:“Error detected by database DLL.” 如下图: 经查找,是因为数据库名称不同造成的; 用户的测试环境使用的库名称为ClaimsReport; 我们本地使用的库名称为Claims;   解决方案: 打开报表工具Crystal Reports 8.5,进入Database->Set Location界面,如下图:   把红框中数据库名称去掉,然后点击按钮【Done】即可。
1048 0
ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
原文:ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案 在 ActiveReports 中可以通过矩阵控件非常方便的实现交叉报表,同时还可以设置数据的分组、排序、过滤、小计、合计等操作,可以满足您报表的智能数据分析等需求。
668 0
ActiveReports 报表应用教程 (1)---Hello ActiveReports
原文:ActiveReports 报表应用教程 (1)---Hello ActiveReports      在开始专题内容之前,我们还是了解一下 ActiveReports 是一款什么产品:ActiveReports是一款在全球范围内应用非常广泛的报表控件,以提供.NET报表所需的全部报表设计功能领先于同类报表控件,包括对交互式报表的强大支持、丰富的数据可视化形式、与Visual Studio的完美集成、以及对WPF / WinForm / ASP.NET / Silverlight和Windows Azure的多平台支持等。
1144 0
ActiveReports 报表应用教程 (4)---分栏报表
原文:ActiveReports 报表应用教程 (4)---分栏报表 在 ActiveReports 中可以实现分栏报表布局样式,可以设置横向分栏、纵向分栏,同时进行分栏和分组设置,统计分栏分组的小计、合计等。
844 0
9455
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载