Средство просмотра отчетов не загружается, показывая пустое пространство-запуск локальных файлов RDLC

у меня проблема со службами reporting services, запускающими локальные файлы rdlc в версии 2005.

у меня есть в 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.";
        }

когда выполняется метод заполнения средства просмотра отчетов результатами отчета, ничего не возникает, как будто средства просмотра отчетов даже нет.

что я сделал, чтобы неприятности стрелять, пока теперь:

  • проверил средство просмотра событий на наличие ошибок, и это единственное, что связано что я получаю, причина [Domain]sp_dbadmin: Не удалось открыть явно указанную базу данных. . Однако, мой пользователь, которого я подключаю, является sysadmin. Я проверил это и уверен, потому что я проверил sys.server_role_members
  • я попытался выдать себя за зарегистрированного пользователя, но безрезультатно
  • я создал определенного пользователя с правами sysadmin и дал все права доступа как из IIS, так и на sql server 2008.

кто-нибудь сталкивался с проблемой, подобной этой, какие-либо идеи?

10 ответов


попробуйте использовать простой отчет, иногда reportviewer выдает исключение, вызванное недопустимым RDLC и показывает пустой отчет.

попробуйте также отладить проект и посмотрите на окно вывода в Visual Studio: вы увидите предупреждение, вызванное движком RDL, может быть полезно исследовать причину ошибки.


У меня была такая же проблема с VS2012, отчет показывает загрузку изображения, а затем после завершения загрузки отчет пуст. Данные существуют, но не отображаются.

решение: просто измените отчет AsyncRendering к False и отчет снова отлично работает.


Я получал ту же проблему, когда я добавляю параметр в 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()

У меня была такая же проблема и в моем случае оказалось, что я поставила набора данных, который не был на самом деле тип объекта отчета.

в моей ситуации отчет ожидал бизнес-объект, но я предоставил источник данных SQL.

Я также столкнулся с этой же проблемой, когда в отчете были параметры, которым не разрешалось быть нулевыми или пустыми, но значения параметров не были предоставлены.

Также обратите внимание, что в порядке чтобы установить источник данных в коде, это должно быть сделано в событии onload, а не в событии page_load.


в моем случае элемент управления ReportViewer не предоставляет сообщений об ошибках (eventviewer или reportviewer), просто пустая страница. Я думаю, что это затрудняет поиск и исправление проблемы. Ответ Йоэля Хальба был моим ключом!

свойство с именем IsReadyForRendering было False. в боле относится к теме параметров.

Я мог бы проверить каждое значение всех параметров с помощью кода (Вы можете выполнить его из немедленного окна)

   var parameters = ReportViewer1.LocalReport.GetParameters()

вы найдите проблемный параметр при просмотре состояния свойства со значением "MissingValidValue"

надеюсь, что это помогает !


это заняло некоторое время, чтобы выяснить, поэтому, надеюсь, эти проверки сэкономят вам некоторое время:

1) Проверьте веб.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) попробуйте элемент управления средства просмотра отчетов непосредственно в режиме конструктора перед перемещением любой конфигурации в код

Жесткий Контроль Просмотра Отчетов

3) убедитесь, что диспетчер сценариев находится на странице перед средством просмотра отчетов

4) Убедитесь, что отчет выполняется вне средства просмотра дизайна, локально или на сервере SSRS

5) УБЕДИТЕСЬ, ЧТО ОТЧЕТ ИМЕЕТ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ ДЛЯ ВСЕХ ПАРАМЕТРОВ! Отчеты, требующие параметров и не имеющие значений по умолчанию, отображаются пустыми.


в моем случае у виновника были параметры с значением Allow null = false (unchecked)... Не спрашивай меня почему.


после изменения размера для бумаги или reportviewer не будет работать, вы можете попробовать мое решение, добавив больше задержки для

WaitControlDisplayAfter

иногда ваши данные слишком велики для обработки для async


была та же проблема. Потребовалось некоторое время, чтобы выяснить для меня, но оказалось, что я случайно создал элемент управления reportViewer, поэтому я потерял то, что дизайнер Visual Studio создал для меня, когда я разрабатывал форму, и поэтому элемент управления reportviewer продолжал появляться пустым - я никогда не устанавливал никаких свойств объекта ReportViewer дизайнера Visual Studio.

глупая ошибка, но потребовалось довольно много времени, чтобы понять.


Я потратил много дней, чтобы выяснить подобный вопрос. Может, это кому-то поможет. Я прочитал почти все темы в 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();
}