C# ReportViewer 控件不显示报告

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17575351/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 09:53:44  来源:igfitidea点击:

ReportViewer control not displaying reports

c#asp.net-mvcreporting-servicesweb-configreportviewer2008

提问by Justin Loveless

I have looked just about everywhere for a solution to this issue and have not found one that has worked for me yet. I have a reporting server (2008 R2) set up on our hosting server. I have created a report from scratch using the report builder, tested it out while logging into the report server with its URL and it successfully generates reports.

我几乎到处寻找解决此问题的方法,但还没有找到对我有用的方法。我在我们的托管服务器上设置了一个报告服务器 (2008 R2)。我使用报告生成器从头开始创建了一个报告,并在使用其 URL 登录到报告服务器时对其进行了测试,并成功生成了报告。

When I try to view the report from our MVC application, only the reports toolbar renders (showing export, print, pages, and the view report button). It shows that it is "Loading", and after it completes it's just a blank report, but it shows the correct parameters on the toolbar, and if I change the name of the parameters in the code it returns an error stating the parameter doesn't exist; so I know the address user/pw information is correct.

当我尝试从我们的 MVC 应用程序查看报告时,只有报告工具栏呈现(显示导出、打印、页面和查看报告按钮)。它显示它正在“加载”,完成后它只是一个空白报告,但它在工具栏上显示了正确的参数,如果我更改代码中的参数名称,它会返回一个错误,说明该参数没有“存在;所以我知道地址用户/密码信息是正确的。

Code and markup for the page

页面的代码和标记

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="Comp.Proj.Core.Model"%>
<%@ Import Namespace="Comp.Proj.Core.Service" %>
<%@ Import Namespace="Microsoft.Reporting.WebForms" %>
<%@ Import Namespace="System.Security.Principal" %>
<%@ Import Namespace="System.Net" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

  <h2><a href="/Reporting">Back to Reports</a> / <%=ViewData["Report"]%></h2>
    <form action="/Reporting/DateViewer" method="get">
      Start Date:
      <input type="text" name="start" class="datepicker" value="<%=ViewData[" Start "] %>" /> End Date:
      <input type="text" name="end" class="datepicker" value="<%=ViewData[" End "] %>" />
      <input type="hidden" name="id" value="<%=ViewData[" Report "] %>" />
      <input type="submit" class="button" value="Run" />
    </form>

    <script runat="server" language="C#">
      protected void Page_Load(object sender, EventArgs e) {
        try {
          if (!IsPostBack) {
            if (ViewData["Start"] != null) {
              var param = new List < ReportParameter > ();


              var start = new ReportParameter("start", ViewData["Start"].ToString());
              var end = new ReportParameter("end", ViewData["End"].ToString());
              var region = new ReportParameter("region", "2");
              param.Add(start);
              param.Add(end);
              param.Add(region);
              ReportViewer1.Width = 1100;
              ReportViewer1.Height = 900;
              ReportViewer1.ShowCredentialPrompts = false;
              ReportViewer1.ShowDocumentMapButton = false;
              ReportViewer1.ShowExportControls = true;
              ReportViewer1.ShowFindControls = false;
              ReportViewer1.ShowPrintButton = true;
              ReportViewer1.ShowPromptAreaButton = false;
              ReportViewer1.ShowRefreshButton = false;
              ReportViewer1.ShowToolBar = true;
              ReportViewer1.ShowZoomControl = false;
              ReportViewer1.SizeToReportContent = true;
              ReportViewer1.ProcessingMode = ProcessingMode.Remote;
              IReportServerCredentials irsc =
                new CustomReportCredentials(ConfigurationManager.AppSettings["ReportServerUser"],
                                            ConfigurationManager.AppSettings["ReportServerPassword"], "SERVERNAME");
              ReportViewer1.ServerReport.ReportServerCredentials = irsc;
              ReportViewer1.ServerReport.ReportServerUrl =
                new Uri(string.Format("http://{0}/ReportServer",
                                      ConfigurationManager.AppSettings["ReportServerUrl"]));
              ReportViewer1.ServerReport.ReportPath = string.Format("/{0}", ViewData["Report"]);
              ReportViewer1.ServerReport.SetParameters(param);
              ReportViewer1.ShowReportBody = true;
              ReportViewer1.ServerReport.Refresh();
            }
          }
        } catch (Exception ex) {
          Response.Write(ex.Message);
        }
      }
    </script>

    <form id="form1" runat="server">
      <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
      <div>
        <rsweb:ReportViewer ID="ReportViewer1" runat="server" />
      </div>
    </form>

</asp:Content>

Web config

网页配置

<assemblies>
    <add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>

<buildProviders>
    <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</buildProviders>

<system.webServer>
    <handlers>
        <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>
</system.webServer>

采纳答案by Justin Loveless

I finally got it to work. For those having the same issues as me, this is what I did to get it to work.

我终于让它工作了。对于那些与我有相同问题的人,这就是我为使其正常工作所做的工作。

In the page directive, set EnableEventValidation="false"and for the report control set AsyncRendering="false".

在页面指令中,设置EnableEventValidation="false"和 为报表控件设置AsyncRendering="false"

回答by David Tjandra

What I did was to ensure all the web.config the the page use the reference ReportViewer 10. Strangely, the screen still showed blank page. Click Refresh, and it showed up. It probably due to the session.

我所做的是确保页面的所有 web.config 都使用参考 ReportViewer 10。奇怪的是,屏幕仍然显示空白页面。单击刷新,它出现了。这可能是由于会话。

回答by user3918696

https://msdn.microsoft.com/en-us/library/ms252090.aspx

https://msdn.microsoft.com/en-us/library/ms252090.aspx

1.Explicitly set the height on the on the ReportViewer control to an actual value rather than a percentage.
2.Add the following style setting to the tag: html,body,form {height:100%}. By forcing the HTML, body, and form tags to maximum height, the frame used in the ReportViewer control will also grow to maximum height, making it visible on the page.
3.Remove the xhtml doctype from the page. (Important)

1.将 ReportViewer 控件上的高度显式设置为实际值而不是百分比。
2.在标签中添加如下样式设置:html,body,form {height:100%}。通过强制 HTML、正文和表单标记达到最大高度,ReportViewer 控件中使用的框架也将增长到最大高度,使其在页面上可见。
3.从页面中删除xhtml doctype。(重要的)

回答by Don Harding

I never add to these solutions but I felt it was time I "give back" instead of just 'taking".

我从不添加这些解决方案,但我觉得是时候“回馈”而不仅仅是“接受”了。

When my page had the following on the page load, the report viewer would show the parameters, but not the actual report. Please note I had AysncRendering=false. So this code did not work (VB).

当我的页面在页面加载时具有以下内容时,报告查看器将显示参数,但不会显示实际报告。请注意我有 AysncRendering=false。所以这段代码不起作用(VB)。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim UserName = HttpContext.Current.User.Identity.Name
    Dim paramList As New Generic.List(Of ReportParameter)
    paramList.Add(New ReportParameter("UserID", UserName, False))
    ReportViewer1.ServerReport.SetParameters(paramList)
End Sub

But when I added the following lines, with no other changes, the whole report loaded.

但是当我添加以下几行时,没有其他更改,整个报告都加载了。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim UserName = HttpContext.Current.User.Identity.Name
    If IsPostBack = False Then
        ReportViewer1.Width = 900
        ReportViewer1.Height = 900

        Dim paramList As New Generic.List(Of ReportParameter)
        paramList.Add(New ReportParameter("UserID", UserName, False))
        ReportViewer1.ServerReport.SetParameters(paramList)
        ReportViewer1.ShowReportBody = True
        ReportViewer1.ServerReport.Refresh()
    End If

Note that I did not make any page declaration changes like previous post here mention.

请注意,我没有像之前在这里提到的帖子那样进行任何页面声明更改。