ASP.NET Framework web升级过程中RDLC报表问题

提示:经验不足的小菜鸟,有不足之处希望可以一起纠正讨论学习,文章内容有借鉴有原创,借鉴之处如有侵权请联系删除。


前言

最近在做 ASP.NET WEB Framework的升级工作,目标版本是4.8,使用的编辑器是VS2022,待升级的项目比较老还是用的vs2008 --net framework 3.5开发的。升级的整体过程还是比较顺利,但是升级后测试报表的时候就出现一些问题如下


一、RDLC文件不能直接打开

原项目使用的reportview的版本是9.0,命名空间是2005版,vs2022的默认打开rdlc报表的命名空间为2016,点击rdlc文件根据提示即可完成升级,之后便可以查看报表内容.
右键rdlc----->打开方式---->json或者其他
右键rdlc打开方式json或者其他
此处为已修改过的命名空间版本

二、使用步骤

1.段后端代码

aspx,ReportViewer1_Load,ReportViewer1_PreRender代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Imppacking.aspx.cs" Inherits="xxx.Imppacking" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="100%" Width="100%" 
            OnLoad="ReportViewer1_Load" 
            onprerender="ReportViewer1_PreRender" SizeToReportContent="True" 
            AsyncRendering="False" ConsumeConteinerWhitespace = "True">
        </rsweb:ReportViewer>
    </div>
    </form>
</body>
</html>

using System.Reflection;

protected void ReportViewer1_Load(object sender, EventArgs e)
{
      ReportViewer1_PreRender(sender, e);
}

protected void ReportViewer1_PreRender(object sender, EventArgs e)
{
     ReportViewer rw = sender as ReportViewer;
     if (rw == null)
      {
         return;
      }
      foreach (RenderingExtension re in rw.LocalReport.ListRenderingExtensions())
      {
           屏蔽掉你需要取消的导出功能 Excel PDF WORD
           屏蔽掉除导出Excel外的功能ring
           string strname = "PDF,EXCEL";
           if (!strname.Contains(re.Name.ToUpper()))
           {
               FieldInfo fi = re.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic);
               fi.SetValue(re, false);
            }     
       }
}

OnLoad=“ReportViewer1_Load”
onprerender=“ReportViewer1_PreRender”
这两个方法不加的话,可能会引起报表主体不能显示的问题

ReportView以换成10.0版本
nuget控制台初始化依赖包命令
Install-Package Microsoft.ReportViewer.WebForms -Version 10.0.40219.1

2.web.config配置文件

代码如下:

<system.web> 
	<compilation debug="true" targetFramework="4.8">
	      <buildProviders>
	        <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
	      </buildProviders>
	      <assemblies>
	        <add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
	        <add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
	      </assemblies>
	</compilation>
	<httpHandlers>
	      <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" />
	</httpHandlers>  
</system.web> 
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <add name="ReportViewerWebControlHandler" verb="*" path="Reserved.ReportViewerWebControl.axd" preCondition="integratedMode" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>
</system.webServer>

3.RDLC文件修改

选中rdlc文件用json格式打开,找到下面两个标签删除,切记只是删除这两个标签,标签包含的内容(省略号位子)要保留

<ReportSections>
  <ReportSection>
    .........
  </ReportSection>
</ReportSections>

操作完之后,再删除下面标签,这个标签是删除整体内容包含省略号位子

<ReportParametersLayout>
  .....
</ReportParametersLayout>  

至此版本升级导致的RDLC文件异常的问题就解决完了

总结

以上就是解决RDLC文件因升级导致的问题的解决过程,如有不足之处或者其他解决方法欢迎留言一起讨论学习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值