您的位置:首页 > 其它

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

2011-04-14 15:22 831 查看
近来,用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与我讨论。xygaofeng[at]sina.com

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gaofeng2000/archive/2007/04/01/1548009.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐