我刚开始在名为 Visual Studio 2017 RC 的新版 Visual Studio 中编写报告软件,但刚刚注意到 Windows 窗体和 WPF 应用程序模板都缺少核心报告查看工具。谁能告诉我为什么 reportviewer 工具从 Visual Studio 2017 中消失了?没有它真的很麻烦。在新的视觉工作室中是否有任何替代方法可以使用此工具?
5 回答
** 更新**:2019 年 11 月 19 日
Microsoft150.1400.0
在其 Nuget 库中发布了新版本的控件。我的简短测试表明它在表单设计器中再次起作用150.1357.0
并且150.1358.0
没有。这包括能够调整和修改控件本身的 ReportViewer 任务。
**更新**:2019 年 8 月 18 日
删除最新版本并回滚150.900.148.0
似乎适用于我与 VS2017 和 VS2019 一起使用的多台计算机。
您可以在 Nuget 解决方案包管理器中回滚到 150.900.148。它的工作原理与以前的版本类似。使用下拉框选择旧版本。
手动删除对 150.900 版本 ReportViewer 的引用并阅读它们可能比修复它们更容易。
请记住在更改工具箱条目后重新启动 Visual Studio。
更新:2019 年 8 月 7 日
较新版本的 ReportViewer 控件已发布,可能与 Visual Studio 2019 同步发布。我使用的是 V150.1358.0。
按照此答案中的指示,可以在设计器的工具箱中获得控制权。但是一旦放在表单上它就不会显示。该控件作为非可视组件显示在表单下方。
这是根据Microsoft SQL BI支持设计的。这是负责控制的组。
虽然您仍然无法直接与控件交互,但这些附加步骤提供了一种解决方法,因此可以在窗体上调整控件的大小。虽然现在可见,但设计器将控件视为不存在。
我根据 Microsoft SQL BI 支持的建议创建了一个反馈请求。请考虑对其进行投票以引起 Microsoft 的注意。
Microsoft Azure 反馈页面 - 恢复 WinForms ReportViewer 控件的设计时功能
附加步骤:
- 将报表查看器添加到 WinForm 后
- 将面板控件添加到 WinForm。
在表单的 form.designer.cs 文件中,将 Reportviewer 控件添加到面板。
// // panel1 // this.panel1.Controls.Add(this.reportViewer1);
返回表单的设计器,您应该会在面板上看到 reportViewer
- 在“属性”面板中,在控件列表下拉列表中选择 ReportViewer
- 将 reportViewer 的 Dock 属性设置为 Fill
现在,您可以通过实际与面板交互来定位 reportViewer。
更新:微软于 2017 年 4 月 18 日发布了一份文档,描述了如何在 Visual Studio 2017 中配置和使用报告工具。
ReportViewer
Visual Studio 2017的工具箱中默认没有安装该工具。为 Visual Studio安装扩展Microsoft Rdlc 报表设计器,然后将其添加到工具箱会导致出现在表单下方的非可视组件。
微软支持告诉我这是一个错误,但截至 2017 年 4 月 21 日,它“按设计工作”。
对于需要ReportViewer
.
- 如果您
ReportViewer
在工具箱中有,请将其删除。突出显示,右键单击并删除。- 您必须有一个打开表单的项目才能执行此操作。
2019 年 8 月 7 日编辑 - 看起来当前版本的 RDLC 报表设计器扩展不再干扰。您需要它来实际编辑报告。
如果您安装了Microsoft Rdlc Report Designer for Visual Studio扩展,请将其卸载。关闭您的解决方案并重新启动 Visual Studio。这是至关重要的一步,如果在切换解决方案时没有重新启动VS,则会出现错误。
- 打开您的解决方案。
- 打开 NuGet 包管理器控制台 (
Tools/NuGet Package Manager/Package Manager Console
) 在 PM> 提示符下输入此命令,大小写很重要。
Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms
您应该看到描述包安装的文本。
现在我们可以暂时将ReportViewer
工具添加到工具箱中。
右键单击工具箱并使用
Choose Items...
我们需要浏览到位于解决方案
Packages
文件夹中的正确 DLL,所以点击浏览按钮。在我们的示例中,我们可以粘贴到包文件夹中,如包管理器控制台的文本所示。
C:\Users\jdoe\Documents\Projects\_Test\ReportViewerTest\WindowsFormsApp1\packages
然后双击名为的文件夹
Microsoft.ReportingServices.ReportViewerControl.Winforms.140.340.80
版本号将来可能会更改。
然后双击
lib
并再次单击net40
。最后双击文件
Microsoft.ReportViewer.WinForms.dll
您应该
ReportViewer
在对话框中看到已选中。滚动到右侧,您将看到与其关联的版本 14.0.0.0。单击确定。
ReportViewer
现在位于工具箱中。
将工具拖动到所需的表单。
ReportViewer
完成后,从工具箱中删除该工具。您不能将其与其他项目一起使用。您可以保存项目并且一切顺利。
请记住在需要打开项目时随时重新启动 Visual Studio,ReportViewer
以便从正确的位置加载 DLL。如果您尝试在不重新启动的情况下打开带有表单的解决方案,ReportViewer
您将看到指示“<code>变量 'reportViewer1' 未声明或从未分配。”的错误。
如果您将新项目添加到您需要创建项目的同一解决方案中,保存解决方案,重新启动 Visual Studio,然后您应该能够将其添加ReportViewer
到表单中。我第一次看到它不起作用并显示为非可视组件。
发生这种情况时,从表单中删除组件、Microsoft.ReportViewer.*
从项目中删除引用、保存并重新启动通常可以工作。
更新:此答案适用于 Visual Sudio 2017 和 2019
对我来说,它通过以下三个步骤工作:
- 将 Visual Studio 更新到最新版本。
- 通过以下方式将报告/报告向导添加到添加/新建项目菜单:
- 转到 Visual Studio 菜单工具/扩展和更新
- 从左侧面板中 选择在线。
- 搜索适用于 Visual Studio 的 Microsoft Rdlc 报表设计器
- 下载并安装它。
通过以下方式添加报表查看器控件:
转到NuGet 包管理器。
安装Microsoft.ReportingServices.ReportViewerControl.Winforms
- 转到包含 Microsoft.ReportViewer.WinForms.dll 的文件夹:%USERPROFILE%\.nuget\packages\microsoft.reportingservices.reportviewercontrol.winforms\140.1000.523\lib\net40
- 将Microsoft.ReportViewer.WinForms.dll文件拖放到 Visual Studio工具箱窗口中。
对于WebForms应用程序:
- 相同。
- 相同。
通过以下方式添加报表查看器控件:
转到NuGet 包管理器。
安装Microsoft.ReportingServices.ReportViewerControl.WebForms
- 转到包含 Microsoft.ReportViewer.WebForms.dll 文件的文件夹:%USERPROFILE%\.nuget\packages\microsoft.reportingservices.reportviewercontrol.webforms\140.1000.523\lib\net40
- 将Microsoft.ReportViewer.WebForms.dll文件拖放到 Visual Studio工具箱窗口中。
就这样!
请注意,上面@Rich Shealer 描述的添加报告服务的过程将在您每次启动不同的项目时进行迭代。为了避免这种情况:
如果您可能需要设置另一台计算机(例如,在家中没有互联网),请将您从市场上下载的安装程序保存在安全的地方,即:
- Microsoft.DataTools.ReportingServices.vsix,和
- Microsoft.RdlcDesigner.vsix
从您创建的应用程序的包或 bin 文件夹中获取以下库,其中包含报告服务:
- Microsoft.ReportViewer.Common.dll
- Microsoft.ReportViewer.DataVisualization.dll
- Microsoft.ReportViewer.Design.dll
- Microsoft.ReportViewer.ProcessingObjectModel.dll
- Microsoft.ReportViewer.WinForms.dll
安装上面 1 中的 2 个组件
- 将上面 2 中的 dll 添加为参考(项目>参考>添加...)
- (可选)将报告选项卡添加到工具栏
- 将项目添加到报告选项卡
- 浏览到 bin 文件夹或您拥有上述 dll 的位置并添加它们
你现在可以走了!ReportViewer 图标将被添加到您的工具栏中,当您想要将新项目...(报告)添加到您的项目时,您现在还可以找到添加到您的通用模板列表中的报告和报告向导模板
注意:使用 Nuget 包管理器进行设置时,报告和报告向导模板在报告下分组。但是,使用我上面描述的方法不会在已安装的模板中添加报告分组,但我认为这没有任何问题,因为它使您能够在没有互联网的情况下快速集成 rdlc,并且无需每次都从 Nuget 下载已有的内容!
从此链接下载适用于 Visual Studio 的 Microsoft Rdlc 报表设计器。 https://marketplace.visualstudio.com/items?itemName=ProBITools.MicrosoftRdlcReportDesignerforVisualStudio-18001
微软详细解释了这些步骤:
以下步骤总结了上述文章。
将 Report Viewer 控件添加到新的 Web 项目:
创建一个新的 ASP.NET 空网站或打开一个现有的 ASP.NET 项目。
通过 NuGet 包管理器控制台安装报表查看器控件 NuGet 包。从 Visual Studio -> 工具 -> NuGet 包管理器 -> 包管理器控制台
Install-Package Microsoft.ReportingServices.ReportViewerControl.WebForms
将新的 .aspx 页面添加到项目并注册报表查看器控件程序集以在页面中使用。
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
将 ScriptManagerControl 添加到页面。
将报表查看器控件添加到页面。可以更新下面的代码片段以引用托管在远程报表服务器上的报表。
<rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote"> <ServerReport ReportPath="" ReportServerUrl="" /></rsweb:ReportViewer>
最后一页应如下所示。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Sample" %>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server"></asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote">
<ServerReport ReportServerUrl="https://AContosoDepartment/ReportServer" ReportPath="/LatestSales" />
</rsweb:ReportViewer>
</form>
</body>
如果您像我一样尝试了其中的一些方法并且卡在工具箱中有控件并且可以在表单上绘制它但它从表单中消失并将其放在组件中的点上,那么只需编辑设计器并在 InitializeComponent() 的适当区域添加以下内容以使其可见:
this.Controls.Add(this.reportViewer1);
or
[ContainerControl].Controls.Add(this.reportViewer1);
添加控件后,您还需要手动调整位置和大小。
肯定不是一个很好的答案,但是如果您遇到困难并且只需要现在完成工作,直到您有更多时间弄清楚,它应该会有所帮助。