本文编译器使用 Visual Studio 2005 数据库采用XML格式 ReportView 版本为2.0 .net版本为2.0

一、水晶报表的缺陷

Crystal Repotrs的功能固然很强大,但是对我们写程序的人来说,是否支持动态生成才是最重要的。如果报表只能静态生成再嵌入到程序中,实在有些没意思。

不巧的是强大的水晶报表这一点做的很不好,我们可以在程序中动态修改数据源,也可以动态修改文本和字段,但是报表的一大特色,数据图表,却只能静态生成。也就是说,假如我设计报表时添加了一个图表,用户希望能在多个字段中选择自己想显示的,动态显示到图表中,水晶报表就做不到。对它来说,我们至多只能在程序中得到一张位图,这样就没有意义了。

这个时候我发现了ReportViewer,它用来显示RDLC语言表述的报表。RDLC最初被用在SQL Server for XML上。它实际上是一个XML文本,这就意味着我们在程序中很容易更改它的构架。ReportViewer是RDLC的浏览器,本身没什么好说的,需要注意的是它的数据源必须是DataTable对象。

二、结构模型

猛的一看有点复杂呵呵,其实还是挺简单的。

数据源

可以是传统数据库,也可以是XML表格

Data Adapter 及 Connection 等

用来连接传统的数据库

DataSet

用来存储数据,同时可以直接操作XML文件

BindingSource

利用DateSet来填充BindingSource,这一步数据中转逻辑上有点多余,但是必不可少

ReportDataSource

利用BindingSource来填充ReportDataSource,......-_-!!

ReportViewer

利用ReportDataSource填充的 数据 及 指定给它的RDLC报表文件 来显示报表

三、示例代码

请大家注意:

1. 这里我呈现给大家的只是如何实现报表,报表本身的制作 及 RDLC描述语言不在讨论范围。ADO.net同样不在讨论范围,感兴趣的读者可以参考这篇文章:《用VC轻松实现 ADO.net》。

2. 如果按照MSDN上介绍的步骤,可以在VB或C#等语言中实现报表显示,但不能用在VC中,因为向导可能产生中文变量,而VC目前还不支持中文变量。请使用VC的读者按照我介绍的步骤来实现。

1.制作报表

新建一个空项目,在解决方案资源管理器中右键点项目名,添加新建项,找到Report,起个名字,点确定。

具体的制作不在这里说了,请参考相关的文章,或者下载我的示例代码,里面有两个做好的报表文件。

2.制作XML数据库文件

ADO.net连接传统数据库这里就不多说了,参见上面那篇链接文章。

方法1:

安装了SQL Server for XML的话,直接建立数据库模型生成XML文件即可。

方法2:

如果没有安装SQL Server for XML,需要绕个弯子:

1.先使用SQL Server 或 其他数据库建立传统的数据库模型。

2.写个临时程序,利用ADO.net将数据库模型导入DataSet中。

3.利用DataSet::WriteXml("文件名");的方法生成XML数据库文件。

方法3:

同样没有安装SQL Server for XML时:

1.先写一个程序,在DataSet中建立数据库模型,当然编程建立要比方法1中的向导建立麻烦一些。

2.利用DataSet::WriteXml("文件名");的方法生成XML数据库文件。

3.连接数据库

ADO.net不再多说。

//连接XML文件

DataSet^ DateSet1 = gcnew DataSet();

DataSet1->ReadXml("XML文件");

4.一系列的数据填充

BindingSource^ aBindingSource;

ReportDataSource^ reportDataSource1;

//根据DateSet1设置BindingSource

aBindingSource = gcnew BindingSource();

aBindingSource->DataMember = "Table1"; //注意,表名要同创建报表时用的相同

aBindingSource->DataSource = DataSet1;

//根据BindingSource设置ReportDataSource

reportDataSource1 = gcnew ReportDataSource();

reportDataSource1->Name = "DataSet1_Table1";

reportDataSource1->Value = aBindingSource;

//根据ReportDataSource设置ReportViewer控件的数据源,ReportViewer控件最终用来显示报表

reportViewer1->LocalReport->DataSources->Add(reportDataSource1);

reportViewer2->LocalReport->DataSources->Add(reportDataSource1);

..... //多个报表窗口可以使用同一个数据源

5.连接要显示的报表

reportViewer1->LocalReport->ReportPath = "rdlc文件1";

reportViewer2->LocalReport->ReportPath = "rdlc文件2";

.....

6.显示报表

reportViewer1->RefreshReport();

reportViewer2->RefreshReport();

.....

7.报表的动态修改

对于普通的数据,只需修改DataSet即可

DataRow^ row = DataSet1->Tables["Table1"]->NewRow();

row[0] = newd->comboBox1->Text; //假设数据来自comboBox控件

row[1] = newd->comboBox2->Text;

.....

DataSet1->Tables["Table1"]->Rows->Add(row);

//刷新一下报表

reportViewer1->RefreshReport();

reportViewer2->RefreshReport();

.....

对于图表之类的数据,需解析RDLC文件,修改之,然后调用RefreshReport()。由于其格式是XML文本,故比较容易,这方面不再多说,感兴趣的读者可以自己解析一下。

四、示例程序

在示例程序中我提供了一个记账本功能的小程序,使用XML数据库文件,两张RDLC报表文件。由于时间关系,没有去做RDLC文件解析,请大家见谅。

report.exe

主程序

ReportViewer.exe

没有安装ReportViewer的客户机需要安装此文件,ReportViewerLP.exe是中文包。

ngen.exe

动态报表的生成速度比较慢,有个解决办法,在命令行方式下敲入ngen install report.exe回车,可以将程序及其依赖项编译成机器码并安装到本机全局映像中去,从而提高运行效率。删除前记得ngen uninstall report.exe一下。

xml文件 及 rdlc文件

一个是数据库文件,一个是报表文件,均是XML文本格式,可以随意打开浏览编辑。

运行效果:

reportviewer控件mysql_真正的全动态报表:ReportViewer+RDLC相关推荐

  1. reportviewer控件mysql_如何将数据表绑定到ReportViewer运行时

    小编典典 我找到了如何将数据表绑定到reportviewer的答案,我将在这里分享可能对其他人有用. 加入形成 clsTables类 , Report1.rdlc文件 , reportViewer1 ...

  2. VS2010 C# ReportViewer控件新手上路心得

    环境:Visual Studio 2010, C#; 前言:本来是用VS2010连接Oracle数据库做一个报表功能,数据集设置部分出了些问题还未解决,因此先用本地动态数据为测试用例先熟悉VS自带的R ...

  3. 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)

    前言:以前曾写过一篇关于动态生成控件的文章<动态添加控件及将某XML动态加入到Activity显示>,比较浅显,对于RelativeLayout的相关布局设置方法及相对布局与线性布局的混合 ...

  4. 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表

    微软的Visual studio提供了ReportViewer控件以及RDLC报表设计工具.下文主要介绍如何在Sharepoint 2010项目开发中使用ReportViewer和RDLC生成项目报表 ...

  5. 使用C#自带的ReportViewer控件生成报表

    第一步:新建数据集 第二步:新建模板,添加数据集 第三步:新建Form窗体,拖入ReportViewer控件 第四步:加载之前建立的模板文件 最后一步:赋值 源代码如下: private void F ...

  6. reportviewer控件mysql_ReportViewer不连接数据库,自定义DataSet导出到报表

    类型:翻译工具大小:4.4M语言:多国语言[中文] 评分:8.1 标签: 立即下载 最近在看报表这一块,在网上找到的大都是连接数据库的,对于自定义的DataTable数据没有详细的连接说明,经过一番寻 ...

  7. VB.net MenuStrip控件通过数据库生成多级动态菜单并添加单击事件

    VB.net MenuStrip控件通过数据库生成多级动态菜单并添加单击事件 个人小白,一个多月前想通过 MenuStrip控件调用数据库数据生成多级联动下拉菜单,结果网上的资料都只是部分代码可用.经 ...

  8. ReportViewer 控件安装

    请搜索: C#VS2017 添加 ReportViewer控件  ,相关博客:https://blog.csdn.net/qq_40741855/article/details/81065685 安装 ...

  9. VB.NET基于ReportViewer控件显示RDLC文件学习总结。

    最近一直在学习VB.NET中的ReportViewer控件绑定RDLC文件显示的内容,VB.NET对于这一块的教程并不如C#多,所以好多时候需要模仿C#,今天特地写一个总结,供后边的学习者以供借鉴(本 ...

最新文章

  1. 两个server 两个数据库 微服务_微服务的数据库设计
  2. 使用 PowerShell 创建 Linux 虚拟机
  3. Centos6 升级glibc-2.17,解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法
  4. poj 1451(Trie)
  5. PHP学习总结(函数、数组、字符串)
  6. 《父亲家书》选:母亲的手摔伤了
  7. 牛客题霸 [ 大数乘法] C++题解/答案
  8. 【转】桌面快捷方式不见了的解决办法
  9. 2013递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
  10. 接口测试学习入门(1)--前期知识储备
  11. [Python] L1-056 猜数字-PAT团体程序设计天梯赛GPLT
  12. 如何让网页中文本框的内容只能读不能写
  13. 在线YAML转XML工具
  14. 在弹窗中新建一个遮罩层
  15. excel从html文件传输乱码,打开乱码解决步骤7:在Excel中直接打开该文本文件
  16. 电脑内录软件如何录制电脑系统在线声音?
  17. Navicat Premium远程连接ORACLE
  18. C语言+深度搜索的的方法解决全排列问题
  19. github学习教程
  20. cad相贯展开图lisp_cad相贯线的画法

热门文章

  1. ZT: 一位老工程师的终告
  2. 如何将双系统变成单系统?
  3. 怎样用processing代码让你的女朋友对你心服口服
  4. x86汇编 linux,Linux操作系统的X86汇编程序设计
  5. RS232/RS485信号转模拟信号 隔离D/A转换器
  6. vbs代码弹计算机,小白零基础学编程-VBS入门之弹出对话框
  7. vmware 共享文件夹失效
  8. Revit API之如何创建梯形墙及带正反面的墙【比目鱼原创】
  9. 微信自动回复客服(机器人)实现
  10. Recent Plan(线上交流课——(一))