#c# #reporting-services #reportingservices-2005 #rdlc
#c# #службы отчетов #reportingservices-2005 #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 amp;amp; data.Tables.Count > 0 amp;amp; 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 Причина: не удалось открыть явно указанную базу данных. . Однако мой пользователь, к которому я подключаюсь, является системным администратором. Я проверил это и уверен, потому что я проверил sys.server_role_members
- Я попытался выдать себя за вошедшего в систему пользователя, но безрезультатно
- Я создал определенного пользователя с правами системного администратора и предоставил все права доступа как из IIS, так и на sql server 2008.
Кто-нибудь сталкивался с подобной проблемой, есть идеи?
Ответ №1:
У меня была такая же проблема с VS2012, в отчете отображается загружаемое изображение, а затем после завершения загрузки отчет становится пустым. Данные существуют, но не отображаются.
Решение: просто измените асинхронность отчета на False, и отчет снова будет работать нормально.
Ответ №2:
Попробуйте использовать простой отчет, иногда reportviewer выдает исключение, вызванное недопустимым RDLC, и показывает пустой отчет.
Попробуйте также отладить проект и посмотрите на окно вывода в Visual Studio: вы увидите предупреждение, выданное ядром RDL, может быть полезно выяснить причину ошибки.
Ответ №3:
У меня была такая же проблема, когда я добавлял параметр в 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()
Комментарии:
1. Не самый хороший пример кода, но вы точно определили проблему!
Ответ №4:
В моем случае элемент управления ReportViewer не предоставляет сообщения об ошибках (EventViewer или элемент управления ReportViewer), просто пустая страница. Я думаю, что это затрудняет поиск и устраняет проблему. Ответ Йоэля Халба был моим ключом!
Свойство IsReadyForRendering было ложным. В BOL ссылается на раздел параметров.
Я мог бы проверить каждое значение всех параметров с помощью кода (вы можете выполнить его из немедленного окна)
var parameters = ReportViewer1.LocalReport.GetParameters()
Вы обнаружите проблемный параметр при просмотре состояния свойства со значением «MissingValidValue»
Надеюсь, это поможет!
Ответ №5:
У меня была та же проблема, и в моем случае оказалось, что я предоставил набор данных, который на самом деле не был типом объекта, который ожидался в отчете.
В моей ситуации в отчете ожидался бизнес-объект, но я предоставил источник данных SQL.
Я также столкнулся с этой же проблемой, когда в отчете были параметры, которым не разрешалось быть пустыми или пустыми, но значения параметров не были указаны.
Также обратите внимание, что для установки источника данных в коде это должно быть сделано в событии onload, а не в событии page_load .
Комментарии:
1. В моем случае у меня также была проблема с параметром отчета, равным null, а затем он загружает пустой отчет. Также не забывайте загружать отчет только в том случае, если (!this. IsPostBack) в противном случае он переходит в цикл загрузки навсегда.
Ответ №6:
Для выяснения этого потребовалось некоторое время, поэтому, надеюсь, эти проверки сэкономят вам некоторое время:
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) попробуйте элемент управления средством просмотра отчетов непосредственно в режиме конструктора, прежде чем переносить какую-либо конфигурацию в код
Жестко запрограммированный элемент управления средством просмотра отчетов
3) Убедитесь, что диспетчер сценариев находится на странице перед средством просмотра отчетов
4) Убедитесь, что отчет выполняется вне средства просмотра дизайна, локально или на сервере SSRS
5) УБЕДИТЕСЬ, ЧТО ОТЧЕТ ИМЕЕТ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ ДЛЯ ВСЕХ ПАРАМЕТРОВ! Отчеты, требующие параметров и не имеющие значений по умолчанию, отображаются пустыми.
Ответ №7:
В моем случае виновником были параметры с разрешенным значением null = false (не отмечен)… Не спрашивайте меня, почему.
Комментарии:
1. как вы это исправили? Как вы настроили его на разрешение нулевых значений?
Ответ №8:
после изменения размера для paper или reportviewer не будет работать, вы можете попробовать мое решение, добавив больше задержки для
WaitControlDisplayAfter
иногда ваши данные слишком велики для асинхронной обработки
Ответ №9:
Возникла та же проблема. Мне потребовалось некоторое время, чтобы разобраться, но оказалось, что я случайно обновил элемент управления ReportViewer самостоятельно, поэтому я потерял то, что дизайнер Visual Studio создал для меня, когда я разрабатывал форму, и именно поэтому элемент управления reportviewer продолжал оставаться пустым — я никогда не устанавливал никаких свойств в элементах конструктора Visual Studio. Объект ReportViewer.
Глупая ошибка, но потребовалось довольно много времени, чтобы разобраться.
Ответ №10:
Я потратил много дней, чтобы выяснить подобную проблему. Возможно, это может кому-то помочь. Я прочитал почти все темы в stackoverflow, но чтение комментариев здесь заставило меня попробовать это. В моем случае были показаны первые две строки (строка параметров и строка с возможностью скрыть параметры), но строки, содержащие кнопки управления и сам отчет, были пустыми. Нажатие View report
не привело ни к какому действию.
Что я сделал, так это загрузил отчет с параметрами без их предоставления — я хотел, чтобы пользователь их заполнил 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();
}