关于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
一、利用向导制作报表
利用向导可以很轻松地完成一个报表。首先新建一个“网站”,添加报表,向导会提示你创建一个数据源并打开数据库工具,根据提示,很容易就能生成一个数据源,做为报表的数据来源。在报表设计器中,可以根据需要画出想要的报表,并从“数据源”中选择想要的数据。这样,就完成了一个报表,接下来就可以使用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
相关文章推荐
- 关于RDLC报表的一些总结,希望对正在学习使用它的朋友有所帮助
- 关于RDLC报表的一些总结,希望对正在学习使用它的朋友有所帮助
- [企业信息化]关于LCS2005的安装总结,但还有很多问题没有解决,希望能够对象我一样的新手有所帮助
- 准备近期写一些关于RESIP开发有关的VOIP资料,希望对大家有所帮助
- 工作之余,整理了一下平时处理数据的一些常用的,简单的方法。希望对学习JAVA的朋友有点帮助
- 关于ubuntu16.4 中安装最新的eclipse或者是STS出现页面特卡,且新建项目没有提示,preference选项中点击左侧标签右侧没反应的解决办法,参照google, 排版不太好,希望对一些小伙伴有所帮助
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助
- 关于.NET2010报表RDLC的一些问题总结
- 关于学习使用CGI的一些总结
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助(原创)
- 最近遇到不少客户提出关于PP账户名字需要更改,如何更改的问题。因此在此做个简单的总结,希望能帮到一些朋友!
- 一些总结与思考(聊聊最近,希望对大家有所帮助)
- 关于printf("%p",p);使用方法的一些总结
- 自己攒的一些总结,希望对新学的有帮助
- 关于exe形式编程的一点心得,希望对大家有所帮助
- 关于我遇到的问题集锦,希望对后学者有所帮助
- 总结一下,我面试了好多家公司遇到的面试题,希望对大家有所帮助
- 一些关于Java面向对象学习、培训机构培训、大学生活状态的感悟和总结
- VC 使用过程中所遇到的一些问题,汇总在这里,希望对后来者有些许帮助
- 关于使用bootstrap的一些小总结