在vs2005中的ReportViewer(RDLC报表)中使用直接打印功能,在vs2005使用ReportViewer2008

       因为水晶报表授权价格的问题,打算在新的项目中使用Visual Studio 2005中自带的MicosoftReportViewer,但VS2005中的MicosoftReportViewer在浏览的时候不能直接打印,只能先导出为Excel或者PDF文件再使用Excel或PDFReader里边的打印实现打印,非常之不方便,也不知道M$怎么想的,不过在VS2008当中M$终于想通了,将MicosoftReportViewer作了一次升级,升级为9.0,新加了一个ActiveX插件,通过这个插件实现了在网页上直接打印。

       如果您的项目是基于VS2005的,但又想使用VS2008当中的MicosoftReportViewer功能以实现直接打印,就需要在发布网站之前修改Web.config文件中的ReportViewer控件版本之后再发布

       那么为什么是在发布之前修改版本,然后发布完成之后又需要改回来呢?可能大家会觉得很奇怪,那是因为我经过无数的方法想直接把VS中的8.0版本控件直接替换成9.0不成功之后才不得已想到的方法,因为没有办法替换掉VS2005中的控件,所以如果我们在开发时如果web.config中的版本是9.0,那么就会有控件版本冲突错误。

具体做法请参考如下的方法:

1. 下载Microsoft Report Viewer Redistributable 2008并安装
http://www.microsoft.com/Downloads/details.aspx?displaylang=zh-cn&FamilyID=cc96c246-61e5-4d9e-bb5f-416d75a1b9ef

另外提示一下,使用这个控件不需要安装Framework 3.5,因为它实际上只是多了一个ActiveX插件,并没有使用到Framework 3.5中的任何功能。

2. 找到web.config中的如下几行,将版本号全部从8.0.0.0改为9.0.0.0
<system.web>
   <httpHandlers>
   <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    validate="false" />

</httpHandlers>
   <compilation debug="true">
    <assemblies>
     <add assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
     <add assembly="Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

</assemblies>
    <buildProviders>
     <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </buildProviders>
   </compilation>
</system.web>

3. 将VS2005为每个页面添加的标记注册说明去掉
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

这里有点小问题,如果我们在asp.net中引用ReportViewer控件之前没有在Web.config中添加标记注册说明,VS会在每个放置了ReportViewer控件的aspx文件中进行控件注册,所以最好的方法是在Web.config中统一进行注册,以免每次都要去删除aspx文件中的注册说明

   <pages>
    <controls>
    <add tagPrefix="rsweb" namespace="Microsoft.Reporting.WebForms" assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </controls>
   </pages>

4.完成所有修改之后再编译发布网站,需要注意的是一定要在发布之前修改,发布之后再修改web.config是不行的。

5.常见错误
报表查看器 Web 控件 HTTP 处理程序尚未在应用程序的 web.config 文件中注册。请将 <add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 添加到 web.config 文件的 system.web/httpHandlers 部分。
出现这个错误的原因是只要在VS2005中对插入了报表的aspx文件进行了编辑,VS就会自动将刚才我们改过的版本号改回8.0.0.0,再改回来就好了,不过这样改来改去也麻烦,最好的方法是使用在3步中提到的方法,对控件进行统一注册。

6.点击“打印”按钮时提示不能加载打印控件的错误
下载SP1版本的控件
Microsoft Report Viewer 2008 SP1 Redistributable - 简体中文
http://www.microsoft.com/downloads/details.aspx?familyid=BB196D5D-76C2-4A0E-9458-267D22B6AAC6&displaylang=zh-cn

Microsoft Report Viewer Redistributable 2008 SP1 语言包
http://www.microsoft.com/downloads/details.aspx?familyid=C1DF3B07-09D7-48CB-BB63-DF6D3C2F8141&displaylang=zh-cn

你可能感兴趣的:(view)