前言:

在阅读本篇文章前,我建议您先阅读我之前写的另一篇关于VS2005中如何将datast动态绑定到reportViewer的文章:VS2005SQL2005 Reporting Service动态绑定报表(Web,因为该篇可以说是对上一篇的补充。

 

关于本例子的例程下载:https://files.cnblogs.com/carlwave/exdynamicreport.rar

 

目的:

通过代码生成ado.net DataSet,然后绑定到reportViewer,基本上实现完全代码化,动态化,使对报表操作更方便。

在上篇中我对如何使用ado.net DataSet动态绑定到reportViewer作了详细介绍,只是上篇中自己留下个疑问,就是对report这个xml文件本身的设计变得相当复杂,通过和网上朋友的交流以及查询资料,写了一个对报表xml文件操作的类,基本实现完全动态化报表操作。

 

对报表(*.rdlc)文件进行操作:

其实,要生成一个rdlc文件并绑定上数据是有很多方法的。

1、 静态:使用微软自带的向导生成dataset,绑定上报表。

2、 完全动态:由于rdlc文件原本就是一个XML文件,所以你可以完全自行在代码中生成一个xml文件,但是这个方案也不让人满意,原因是:所有的报表对象都得自己生成,没有可视化工具的设计既繁琐又复杂。特别是如果设计几个line,然后再来上几个分组的话,工作量巨大。

3、 部分动态:首先加载rdlc文件到一个XmlDocument对象;然后修改xml内容;把xml序列化成字节流,交给ReportViewer显示。该方案缺点在于每次运行都需要重新加载rdlc,修改,增加了代码复杂度和运算量。

4、 动态修改rdlc文件->静态调用:这个方案就是我这里要介绍的方案,该方案通过对已经生成的rdlc文件进行读写操作,动态加入了ado.net dataset生成的字段和数据源。
        优点在于只需要在第一次和
dataset
数据源变化的时候对报表的数据源部分进行重新读写就可。

PS:关于完全动态和部分动态可以参考:http://www.weste.net/2006/5-29/15422156045.html

 

详细操作步骤:

1、 新建一个解决方案,增加一个Web项目。

2、 增加一个报表文件。(图)
VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源

3、 增加报表xml操作的RdlcDataSet类,这个类是我纯粹为了报表文件关于数据连接写的,由于使用性比较单一,实现了大部分功能,但是总的来说封装的不是最好,如果你要对报表文件有更多的需求,可以重新封装这个类,具体怎么调用看代码。

  1VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'------------------------------------------------------------------------------
  2VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--ClassName: RdlcDataSet
  3VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--Description: for reset the report file(*.rdlc),add the DataSets files and datasources
  4VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--             If you want to use this class, you should do:
  5VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--             First:Use Vs2005 to creat a report file(*.rdlc)
  6VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--             Second:create a ado.net dataset and pass it to this class
  7VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--             Third:run in your codes EX:Dim objRdlcDataSet As New RdlcDataSet
  8VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--                          objRdlcDataSet.RdlcDataSetNew("Reports\temp.rdlc", "Northwind", "Northwind", dataset)
  9VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--                   Your just need to run it only once.
 10VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--Input:    ado.net dataset, DataSourceName,dataSetName   
 11VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--Output :     
 12VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--08/31/06 -   Created (Fei) 
 13VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--    just run once
 14VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'-- ex:Dim objRdlcDataSet As New RdlcDataSet
 15VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'-- objRdlcDataSet.RdlcDataSetNew("Reports\temp.rdlc", "Northwind", "Northwind", dataset)
 16VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--
 17VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'-- if you just want to add a dataset in exist datasets
 18VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'-- ex:Dim objRdlcDataSet As New RdlcDataSet
 19VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--    objRdlcDataSet.RdlcFileCheck("Reports\temp.rdlc")
 20VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源'--    objRdlcDataSet.AddDataSet(DataSetName, DataSourceName, DataSetAdd)
 21VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源
 22VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源Imports System.Data
 23VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源Imports System.Data.SqlClient
 24VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源Imports System.Xml
 25VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源Imports System.IO
 26VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源
 27End Class


4、 在代码中生成ado.net dataset,动态调用报表,运行一次(运行一次即可,以后除非dataset的数据源变了,否则可以注释掉)

 1End Class

 

5、 设计报表,增加一个table,在table的属性中输入dataset的名字,注意:这个名字必须和你写报表文件所使用的dataset名字相同,否则会报错,找不到dataset。(图)
VS2005+SQL2005 Reporting动态增加报表(*.rdlc)数据源

6、 再次运行即可。

PS:例程中的报表文件加入了一些分组以及函数的调用,关于报表的使用我就不描述了,这方面的资料还是比较多的。写的比较仓促,欢迎大家给出意见。

相关文章: