提示:经验不足的小菜鸟,有不足之处希望可以一起纠正讨论学习,文章内容有借鉴有原创,借鉴之处如有侵权请联系删除。
前言
最近在做 ASP.NET WEB Framework的升级工作,目标版本是4.8,使用的编辑器是VS2022,待升级的项目比较老还是用的vs2008 --net framework 3.5开发的。升级的整体过程还是比较顺利,但是升级后测试报表的时候就出现一些问题如下
一、RDLC文件不能直接打开
原项目使用的reportview的版本是9.0,命名空间是2005版,vs2022的默认打开rdlc报表的命名空间为2016,点击rdlc文件根据提示即可完成升级,之后便可以查看报表内容.
右键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文件因升级导致的问题的解决过程,如有不足之处或者其他解决方法欢迎留言一起讨论学习