真正地全动态报表RDLC和ReportViewer_第1页
真正地全动态报表RDLC和ReportViewer_第2页
真正地全动态报表RDLC和ReportViewer_第3页
真正地全动态报表RDLC和ReportViewer_第4页
真正地全动态报表RDLC和ReportViewer_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、阅读本文需要有 XML解析及ADO.net相关经验。本文编译器使用Visual Studio 2005 数据库采用 XML格式 Reportview 版本为2.0 .net版本为2.0一、水晶报表的缺陷Crystal Repotrs的功能固然很强大,但是对我们写程序的人来说,是否支持动态生成才 是最重要的。如果报表只能静态生成再嵌入到程序中,实在有些没意思。不巧的是强大的水晶报表这一点做的很不好,我们可以在程序中动态修改数据源,也可以动态修改文本和字段,但是报表的一大特色,数据图表,却只能静态生成。也就是说,假 如我设计报表时添加了一个图表,用户希望能在多个字段中选择自己想显示的,动态显示到图

2、表中,水晶报表就做不到。对它来说,我们至多只能在程序中得到一张位图,这样就没有意义了。这个时候我发现了 ReportViewer,它用来显示RDLC语言表述的报表。RDLC最初被用 在SQL Server for XML上。它实际上是一个 XML文本,这就意味着我们在程序中很容易更 改它的构架。ReportViewer是RDLC的浏览器,本身没什么好说的,需要注意的是它的数 据源必须是DataTable对象。二、结构模型客户ReportViewerRDLC文件ReportCat aSourceBinding SourceDataSel>D0-口 elData Adapter数据源藏数据源

3、 掠山數据库猛的一看有点复杂呵呵,其实还是挺简单的。 数据源可以是传统数据库,也可以是XML表格Data Adapter 及 Connection 等用来连接传统的数据库DataSet用来存储数据,同时可以直接操作XML文件BindingSource禾U用DateSet来填充Bin di ngSource,这一步数据中转逻辑上有点多余,但是必不可少ReportDataSource利用 BindingSource 来填充 ReportDataSource, -_-!Reportviewer利用ReportDataSource填充的 数据及指定给它的RDLC报表文件 来显示报表三、示例代码请大家注

4、意:1. 这里我呈现给大家的只是如何实现报表,报表本身的制作及RDLC描述语言不在讨论范围。ADO.net同样不在讨论范围,感兴趣的读者可以参考这篇文章:用VC轻松实现ADO.net。2. 如果按照MSDN上介绍的步骤,可以在 VB或C#等语言中实现报表显示,但不能用在VC中,因为向导可能产生中文变量,而VC目前还不支持中文变量。请使用 VC的读者按照我介绍的步骤来实现。1. 制作报表新建一个空项目,在解决方案资源管理器中右键点项目名,添加新建项,找到Report,起个名字,点确定。具体的制作不在这里说了,请参考相关的文章,或者下载我的示例代码,里面有两个做好的报表文件。2. 制作XML数据库

5、文件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中建立数据库模型,

6、当然编程建立要比方法1中的向导 建立麻烦一些。2. 利用DataSet:WriteXml("文件名");的方法生成 XML数据库文件。3. 连接数据库ADO.net不再多说。/ 连接 XML文件 DataSetA DateSet1 = gcnew DataSet(); DataSet1->ReadXml("XML文件");4一系列的数据填充Bindin gSourceA aBindin gSource; ReportDataSource reportDataSourcel; /根据DateSetl 设置 BindingSource aBinding

7、Source = gcnew BindingSource();aBi ndi ngSource->DataMember = "Table1" /注意,表名要同创建报表时用的相同aBindingSource->DataSource = DataSet1; / 根据 BindingSource 设置 ReportDataSource reportDataSource1 = gcnew ReportDataSource(); reportDataSource1->Name = "DataSet1_Table1" reportDataSourc

8、e1->Value = aBi ndi ngSource; /根据ReportDataSource 设置ReportViewer控件的数据源,ReportViewer控件最终用来显示报表 reportViewer1->LocalReport->DataSources->Add(reportDataSource1);reportViewer2->LocalReport->DataSources->Add(reportDataSource1); . /多个报表窗口可以使用同一个数据源5. 连接要显示的报表reportViewer1->LocalRep

9、ort->ReportPath = "rdlc文件 1"reportViewer2->LocalReport->ReportPath = "rdlc文件 2"6. 显示报表reportViewer1->RefreshReport(); reportViewer2->RefreshReport();7. 报表的动态修改对于普通的数据,只需修改DataSet即可DataRowA row = DataSet1->Tables"Table1"->NewRow(); row0= n ewd->co

10、mboBox1->Text; /假设数据来自 comboBox 控件 row1=n ewd->comboBox2->Text; . DataSet1->Tables"Table1"->Rows->Add(row); /刷新一下报表 reportViewer1->RefreshReport(); reportViewer2->RefreshReport(); .对于图表之类的数据,需解析RDLC文件,修改之,然后调用RefreshReport()。由于其格式是XML文本,故比较容易,这方面不再多说,感兴趣的读者可以自己解析一下。

11、四、示例程序在示例程序中我提供了一个记账本功能的小程序,使用XML数据库文件,两张 RDLC报表文件。由于时间关系,没有去做RDLC文件解析,请大家见谅。report.exe主程序ReportViewer.exe没有安装 ReportViewer的客户机需要安装此文件,ReportViewerLP.exe是中文包。ngen.exe动态报表的生成速度比较慢,有个解决办法,在命令行方式下敲入ngen in stall report.exe回车,可以将程序及其依赖项编译成机器码并安装到本机全局映像中去,从而提高运行效率。删除前记得 ngen unin stall report.exe 一下。xml文件 及rdlc文件一个是数据库文件,一个是报表文件,均是XML文本格式,可以随意打开浏览编辑。运行效果:囱开销记账数据报表数据分析数据总表2006 年2007 年/ 3 >|一自当JJ50%2006年开销记录更新直找I下一4、8ME : AC祖nr2B9X01¥1D1081Y»32 HjB vT M «d XX)Oli -Y2t»1a.ieCSLBSQ2L>00 1gY 33QLS.* HJBMi W-H J

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论