报表查看器未加载,显示空白 - 运行本地RDLC文件

时间:2011-10-13 13:02:04

标签: c# reporting-services reportingservices-2005 rdlc

我遇到了报告服务的问题,在2005版本上运行本地rdlc文件。

我在HTML中有一个报表查看器设置为在本地运行,如下所示:

 <rsweb:ReportViewer ID="ReportingServicesReportViewer" runat="server" Height="100%"
            ProcessingMode="Local" ShowParameterPrompts="False" Width="100%">
        </rsweb:ReportViewer>

在代码中

// create SqlConnection
        SqlConnection myConnection = new SqlConnection(ConnectionString);
        myCommand.Connection = myConnection;
        SqlDataAdapter da = new SqlDataAdapter(myCommand);

        //get the data
        DataSet data = new DataSet();
        da.Fill(data);

        if (data != null && data.Tables.Count > 0 && data.Tables[0].Rows.Count > 0)
        {
            ReportingServicesReportViewer.Visible = true;
            ltrStatus.Text = string.Empty;

            //provide local report information to viewer
            ReportingServicesReportViewer.LocalReport.ReportPath = Server.MapPath(Report.RDLCPath);

            //bind the report attributes and data to the reportviewer
            ReportDataSource rds = new ReportDataSource("DataSet1", data.Tables[0]);
            ReportingServicesReportViewer.LocalReport.DataSources.Clear();
            ReportingServicesReportViewer.LocalReport.DataSources.Add(rds);
            ReportingServicesReportViewer.LocalReport.Refresh();
        }
        else
        {
            ReportingServicesReportViewer.Visible = false;
            ltrStatus.Text = "No data to display.";
        }

当执行使用报告结果填充报告查看器的方法时,没有任何内容出现,就好像报告查看器不在那里一样。

到目前为止我做了什么麻烦拍摄:

  • 检查事件查看器是否有错误,这是唯一相关的事情 我得到的,[域名] \ sp_dbadmin原因: 无法打开显式指定的数据库。 。然而, 我正在连接的用户是一个系统管理员。我检查了那个 我确定,因为我检查了sys.server_role_members
  • 我尝试模仿已登录的用户,但无济于事
  • 我创建了一个具有sysadmin权限的特定用户,并且从IIS和sql server 2008都提供了所有访问权限。

有没有人遇到类似这样的问题,有什么想法吗?

10 个答案:

答案 0 :(得分:9)

我和VS2012有同样的问题,报告显示加载图像,然后加载完成后,报告为空白。数据存在但未呈现。

解决方案:只需将报告 AsyncRendering更改为False ,报告再次正常工作。

答案 1 :(得分:8)

尝试使用简单的报告,有时报告查看器会抛出由无效的RDLC引起的异常并显示空报告。

还尝试调试项目并查看Visual Studio中的输出窗口:您将看到RDL引擎发出的警告,调查错误原因可能很有用。

答案 2 :(得分:7)

当我在rdlc中添加参数但未分配参数时,我遇到了同样的问题。 我通过添加此代码解决了这个问题。

Dim p_Date As Microsoft.Reporting.WebForms.ReportParameter
p_Date = New Microsoft.Reporting.WebForms.ReportParameter("DATE", txtDate.Text)
    Me.ReportViewer1.LocalReport.SetParameters(New Microsoft.Reporting.WebForms.ReportParameter() {p_Date})
    ReportViewer1.LocalReport.Refresh()

答案 3 :(得分:3)

我遇到了同样的问题,在我的情况下,我发现我提供的数据集实际上并不是报告所期望的对象类型。

在我的情况下,报告需要一个业务对象,但我提供了一个SQL数据源。

当报表上的参数不允许为空或空白但未提供参数值时,我也遇到了同样的问题。

另请注意,为了在代码中设置数据源,必须在onload事件中完成,而不是在page_load事件中完成。

答案 4 :(得分:3)

在我的情况下,ReportViewer控件不提供错误消息(EventViewer或ReportViewer控件体),只是空白页面。我认为这很难找到并解决问题。 Yoel Halb的回答是我的关键!

名为IsReadyForRendering的属性为False。 In the BOL指的是参数主题。

我可以用代码检查整个参数的每个值(你可以从即时窗口执行它)

SampleObject

当您使用值&#34; MissingValidValue&#34;

查看属性State时,您会发现有问题的参数

希望这有帮助!

答案 5 :(得分:2)

这个花了一些时间来弄清楚,所以希望这些检查可以节省你一些时间:

1)验证web.config

<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>

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

<system.webServer>
  <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>

2)在将任何配置移动到代码

之前,直接在设计视图中尝试报表查看器控件

Hard-Coded Report Viewer Control

3)验证脚本管理器是否在报表查看器之前的页面上

4)确保报告在本地或SSRS服务器上的设计查看器之外运行

5)确保报告对所有参数都有默认值!需要参数但没有默认值的报告显示为空白。

答案 6 :(得分:1)

在我的情况下,罪魁祸首是让参数与Allow null value = false(未选中)...不要问我为什么。

答案 7 :(得分:1)

在更改纸张或reportviewer的大小后无法使用,您可以通过增加

的延迟来尝试我的解决方案
  

WaitControlDisplayAfter

有时您的数据太大,无法进行异步处理

答案 8 :(得分:0)

有同样的问题。花了一段时间为我弄清楚但事实证明我不小心新推出了reportViewer控制自己,所以我在设计表单时丢失了Visual Studio Designer为我创建的内容,这就是为什么reportviewer控件一直空白 - 我从未在Visual Studio Designer的ReportViewer对象上设置任何属性。

愚蠢的错误,但花了很长时间才弄明白。

答案 9 :(得分:0)

我花了很多天来找出类似的问题。也许这可以帮助某人。我已经阅读了关于stackoverflow的几乎所有线程,但是在这里阅读注释使我可以尝试一下。在我的情况下,显示了前两行(参数行和带有隐藏参数选项的行),但是包含管理按钮和报表本身的行为空。点击View report不会执行任何操作。

preview of auto generated HTML web page

我所做的是在没有提供参数的情况下加载了报表-我希望用户在Page_Load上填写它们。

protected void Page_Load( object sender, EventArgs e )
{
    this.LoadReport();
}

private void LoadReport()
{
        // retrieve path param from "Reports/{path}" URL
        string reportPath = Request.QueryString[ "path" ] as string;
        string reportServerUrl = System.Configuration.ConfigurationManager.AppSettings[ "ReportServerUrl" ];

        this.MainReport.ProcessingMode = ProcessingMode.Remote;
        this.MainReport.ServerReport.ReportServerUrl = new Uri( reportServerUrl );
        this.MainReport.ServerReport.ReportPath = reportPath;
        this.MainReport.ServerReport.Refresh();
}

Page_Load代码更改为下面给出的代码后,一切正常。

protected void Page_Load( object sender, EventArgs e )
{
    if ( !this.IsPostBack )
        this.LoadReport();
}