现在的位置: 首页 > 综合 > 正文

关于RDLC报表的一些总结,希望对正在学习使用它的朋友有所帮助

2012年04月25日 ⁄ 综合 ⁄ 共 2294字 ⁄ 字号 评论关闭

近来,用vs2005开发一个asp.net项目,其中又有让人讨厌的报表。 在vs2003下,集成了水晶报表,相信很多朋友对它已经非常熟悉, 到了2005 ,可能是为了照顾开发人员的习惯,依然有水晶,但在部署时却会遇到不少麻烦,让人望而却步。而微软也正式推出了自己的报表工具,并将其做为 sqlserver2005一个正式的产品,这就是Reporting Services,该报表如果只在客户端使用则被称为rdlc。
一、利用向导制作报表
利 用向导可以很轻松地完成一个报表。首先新建一个“网站”,添加报表,向导会提示你创建一个数据源并打开数据库工具,根据提示,很容易就能生成一个数据源, 做为报表的数据来源。在报表设计器中,可以根据需要画出想要的报表,并从“数据源”中选择想要的数据。这样,就完成了一个报表,接下来就可以使用 ReportViewer控件来显示这个报表了。新建一个WebForm,从工具箱中拖一个ReportViewer控件到页面上,它会提示你选择报表, 我们就选择刚才设计的报表。OK,运行程序就能看到想要的东西了。
二、利用程序动态加载报表
利 用向导制作报表的确方便快捷,但作为程序员的我们,却并不甘心于此,因为实际需求千差万别,固定的报表往往并不能满足我们的需求。如何能做到像水晶报表那 样,定义好报表的架构后,只需指定要绑定的DataSet数据,就能加载报表呢?因为我们对于这种方法非常熟悉也很容易理解,而且操作起来也会更加灵活, 当然也有助于我们将数据访问类封装。经过仔细研究并结合网友的经验,找到了一种简易的办法。
观察一下ReportViewer,在给它指定要显示的报表后,它会自己生成一个ObjectDataSource,该对象会根据生成数据源时定义的方法,获取数据库中的数据。打开该页面的源代码,会发现这样的语句:

<LocalReport ReportPath="Report.rdlc">
                
<DataSources>
                    
<rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1_DEPARTMENT" />
                
</DataSources>
</LocalReport>

其中Name="DataSet1_DEPARTMENT"指明了报表数据源的名称,这个名字很关键,它是从哪里来的呢?打开报表的xml源文件就会发现它的定义:

<DataSets>
    
<DataSet Name="DataSet1_DEPARTMENT">

所以,要想利用DataSet来加载报表,只需找到这个名字,在正在的定义数据源上指定其Name就为这个值,就可以用正常的代码方式加载了。典型代码如下:

ReportViewer1.LocalReport.ReportPath = MapPath("~/myrdlc.rdlc");
   DataSet ds = DataSetSel();//获取数据集的方法
//设置报表数据源
ReportDataSource rds = new ReportDataSource("DataSet1_DEPARTMENT", ds.Tables[0]);//注意这里的name和报表中的一致
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();

三、如何给参数赋值
在定义报表时,我们可以给这个报表添加参数,那么如何给这些参数赋值呢?对于自动生成的报表,赋值方法可以参照帮助文档,我这里说的是针对前面描述的方法,下面是代码片断:

ReportParameter p = new ReportParameter("title""hello");//title是报表中定义的参数
ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { p });

四、导出pdf出错但导出Excel正常
ReportViewer提供了一 个导出按钮,可以方便地将报表导出为excel或pdf(但是没有象水晶那样提供一个打印插件,感觉有些遗憾),我在测试它导出为excel很正常,但导 出pdf时却总是出错,慢慢我发现只要报表中有中文就会出错,从网上也找到一个解决方法说是更改为某一字体,但我试了不灵,但显然这个问题是由于pdf对 中文的支持不够造成的。这个问题困扰了很长时间,在csdn社区里也发现不少网友碰到这个问题。昨天无意中就发现,如果采有前面讲的利用程序来加载报表, 导出pdf时就不会出错了。呵呵,问题是解决了,只是没有想明白其中的原由?

五、另一种动态加载报表
前 面所讲的动态加载报表的方法中,报表需要事先定义好,通过设置ReportPath来获取不同的报表,并且通过控制DataSet的内容来决定报表显示的 内容。网上也提供了一种方法,可以通过在程序中加载定制的报表定义文件来达到加态加载的目的,这个我还没有用上,大家可以用关键字“rdlc”搜一下,很 多这方面的文章。

这些都是我在初学rdlc报表时困惑过我的问题,我想有许多初学者也可能象我一样遇到这些问题,所以写出来和大家交流一下,欢迎留言或email与我讨论。

 

转自:http://blog.csdn.net/gaofeng2000/archive/2007/04/01/1548009.aspx

抱歉!评论已关闭.