Microsoft ReportViewer 控件类型版本兼容问题及解决方法

错误

Parser Error Message: The base class includes the field ‘rvEquipment‘, but its type (Microsoft.Reporting.WebForms.ReportViewer) is not compatible with the type of control (Microsoft.Reporting.WebForms.ReportViewer).

添加引用,因为项目的.Net框架版本是4.0,因此ReportViewer的版本是9.0.

因为使用的开发工具是Visual Studio 2013,因此默认的.Net框架版本是4.5,因此默认的Report Viewer版本是11.0.

此时,程序运行时,会出现版本不兼容的问题。但在错误提示中,显示的是类型不兼容,而它们的类型确实一样的,这就是困扰所在。

解决方法是,在工具箱中添加.Net 4.0的11.0版本的ReportViewer,并使用该控件来显示报表。

此后新建页面,拖入9.0版本的ReportViewer,即可以查看报表。

但是,原来在4.5环境下创建的页面,使用9.0的控件替换11.0的控件后,仍然提示错误。

原因在于,ReportViewer版本的属性,不是在某个控件上指定的,而是在所在的页面中指定的。因此,不能在一个页面中存在两个不同版本的ReportViewer。注册的代码如下:

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

移除该段代码后,重新拖入9.0的控件进行注册。

再次运行,错误提示如下:

Compiler Error Message: CS0433: The type ‘Microsoft.Reporting.WebForms.LocalReport‘ exists in both ‘c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\11.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.WebForms.DLL‘ and ‘c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll‘

原因在于配置信息中存在两个版本的配置。因此需要删除11.0的配置信息,并把相应的11.0的信息替换为9.0的信息(替换内容为Version和PublicKeyToken)。

web.config配置信息

<?xml version="1.0"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <httpHandlers>
      <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
        validate="false" />
    </httpHandlers>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91" />
        <add assembly="Microsoft.ReportViewer.Common, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91" />
        <add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
      </assemblies>
      <buildProviders>
        <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
      </buildProviders>
    </compilation>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </handlers>
  </system.webServer>
</configuration>

配置完成后运行,仍然出错,此时问题已经不再是ReportViewer了。因为ReportViewer引用的报表以及数据源等,都存在版本兼容的问题,都需要修改。

综述,使用Visual Studio创建Report Application,版本需要特别注意,需要正确选择.Net框架版本,否则后续移植需要大量的工作。

时间: 2024-10-02 14:01:47

Microsoft ReportViewer 控件类型版本兼容问题及解决方法的相关文章

关于在xp系统下CTreeCtrl控件不显示图标的一种解决方法

在最近的项目中,遇到 了这样一个比较棘手的问题,最后花了一天的时间才解决,现总结一下,以供大家参考! 问题:原来的项目工程在XP系统下用VC6编写的,一切没有问题.但由于现实需要需要在WIN7/XP系统运行,我们把工程转到了VC2010,在WIN7下没有问题.但在XP却出现了一个莫名的问题:就是CTreeCtrl控件的BMP图标不显示,在显示图标的地方全部不显示(为空),经过反复检测,确认代码没有问题(在WIN7系统下没有出现问题). 其中的显示图标的CTreeCtrl控件代码如下: .h文件

C# 引发“线程间操作无效: 从不是创建控件“XXX”的线程访问它” 解决方法

在异步线程启动后添加 “CheckForIllegalCrossThreadCalls = false;”即可有效的防止 异步线程给UI控件赋值时  引发异常 例如: //Framework 2.0 //ServerThread = new Thread(RecieveAccept); //ServerThread.Start(); //Framework 4.0以上 ServerTask = new Task(() => RecieveAccept()); ServerTask.Start()

ASP.NET让FileUpload控件支持浏览自动上传功能的解决方法

ASP.NET的FileUpload控件默认是不支持服务端的onchange事件的,此时可以用一种变通的方法来实现这一功能. 这就需要借用客户端的onchange事件,调用__doPostBack方法来用LinkButton的OnClick事件模拟一个事件触发的过程,具体代码如下: 客户端: <asp:FileUpload ID="fuPhoto" onchange="javascript:__doPostBack('lbUploadPhoto','')" r

线程间操作无效: 从不是创建控件“pbarc”的线程访问它 解决方法

public partial class Form5 : Form { public Thread PBarThread; private delegate void MyTestDelegate(object obj); private MyTestDelegate myTest; /// <summary> /// dev进度条 /// </summary> private DevExpress.XtraEditors.ProgressBarControl pBarc; pub

部署报表和 ReportViewer 控件 rdlc

原文:部署报表和 ReportViewer 控件 rdlc 部署报表和 ReportViewer 控件 您可以将报表和 ReportViewer 控件作为应用程序的一部分自由发布.根据控件类型以及报表是配置为本地处理还是远程处理,部署要求会有很大不同.在同一个应用程序中,既可以部署本地处理的报表,也可以部署远程处理的报表. 重新发布 ReportViewer 控件 可重新发布的 ReportViewer 控件是一个名为 ReportViewer.exe 的自解压缩文件,其中包括一个 .msi 文

动态绑定ReportViewer控件之经验总结

以上两篇文章已经很丰富了,但是照做一遍不行,检查了N遍还是不行,就是找不出问题原因,总是提示“尚未为数据源“DataSet1_DataTable1”提供数据源实例.”这主要是说在为ReportViewer控件选择数据源的时候,还没有选择数据源实例,如图所示 ,因此要选择一个数据源,例如ObjectDataSource1,这个一般是在你选择的时候自动生成的,但即使选择了数据源也还是会出错,比如“处理报表时出错.未能找到在 ObjectDataSource“ObjectDataSource2”的 T

Microsoft Word 控件Essential DocIO下载及介绍

Essential DocIO是一款强大的.NET控件,可用于读取Microsoft Word 文件,使你的应用程序可以很容易地创建丰富的Word文档,支持多种像Office word一样的操作,可以导出为多种文件格式,对文档进行格式化等,开发人员可以使用该控件创建出像Word一样的报表文档. 具体功能: 仅需要一行代码就可以创建出一个新的Word文档,并可以进行很多自定义选项,如:插入片段.段落.书签.图片等 所有标准和自定义属性都可以查看和修改 支持创建和取得文档里的变量 支持设置页边距 当

C# 中常用数据类型与控件类型的命名规则

数据类型 数据类型简写 标准命名举例 Array arr arrShoppingList Boolean bln blnIsPostBack Byte byt bytPixelValue Char chr chrDelimiter DateTime dtm dtmStartDate Decimal dec decAverageHeight Double dbl dblSizeofUniverse Integer int intRowCounter Long lng lngBillGatesInc

报表控件Stimulsoft Reports数据字段的使用方法

数据字段在报表中有着重要的作用.Stimusoft Reports报表中数据字段的使用简明易懂,在报表工具中也有着显著优势. 数据源的值可用于表达式中.若要从数据源中引用一个字段,你必须提供一个该字段的字符串表示形式.引用的语法很简单——在大括号中给出数据源名称,并且字段名用小数点或句号分隔,如下所示: {DataSource.Column} 举个例子,如果在字段名为“The Big Company”下有一个客户表条目,你需要输入以下表达式: Company Name: {Customers.C