Источник определения отчета не указан

Я использую следующий код, пытаясь установить SetParametr :

    var report = new ReportParameter[1];
    report[0] = new ReportParameter("MyName", "Raha");
    var reportDataSource1 = new ReportDataSource { Name = "WpfApplication17_User", Value = _users };


    _reportViewer.LocalReport.DataSources.Add(reportDataSource1);
    _reportViewer.ServerReport.SetParameters(report);
    _reportViewer.LocalReport.ReportPath = "../../Report1.rdlc";

    _reportViewer.RefreshReport();

ошибка: не указан источник определения отчета

Почему неправильно?

Я создал параметр отчета, имя параметра — MyName.

ОБНОВИТЬ :

Я использую следующий код:

    //var report = new ReportParameter[1];
    //report[0] = new ReportParameter("MyName", "Raha");


    var reportDataSource1 = new ReportDataSource { Name = "WpfApplication17_User", Value = _users };

    string exeFolder = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

    _reportViewer.LocalReport.ReportPath =exeFolder + @"\Reports\Report1.rdlc";


    _reportViewer.LocalReport.DataSources.Add(reportDataSource1);

    //_reportViewer.ServerReport.SetParameters(report);

    _reportViewer.RefreshReport();

данные отображаются в отчете.

но я использую следующий код:

   var report = new ReportParameter[1];
            report[0] = new ReportParameter("MyName", "Raha");


            var reportDataSource1 = new ReportDataSource { Name = "WpfApplication17_User", Value = _users };

            string exeFolder = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

            _reportViewer.LocalReport.ReportPath = exeFolder + @"\Reports\Report1.rdlc";


            _reportViewer.LocalReport.DataSources.Add(reportDataSource1);

            _reportViewer.ServerReport.SetParameters(report);//error

            _reportViewer.RefreshReport();

ошибка как: не указан источник определения отчета


person MMD MNC    schedule 15.10.2012    source источник


Ответы (6)


Поместите ReportParameter после

_reportViewer.LocalReport.ReportPath = "../../Report1.rdlc";

здесь вы пишете свой ReportParameter

person Krishna Choudhari    schedule 15.09.2016

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

Код ниже должен работать:

_reportViewer.LocalReport.DataSources.Add(reportDataSource1);
_reportViewer.LocalReport.ReportPath = "../../Report1.rdlc";
_reportViewer.ServerReport.SetParameters(report);
person Jonathan Hiben    schedule 27.07.2016

Ошибка не связана с вашим параметром. Ошибка связана с ReportPath. См. этот другой вопрос SO относительно настройки пути отчета. Вы уверены, что указанный вами относительный путь верен при запуске вашего приложения. Относится ли этот путь к вашему исходному коду? Если вы хотите увидеть, где он ищет файл, вы можете добавить некоторый код для разрешения этого относительного пути (Path.GetFullPath) и посмотрите, куда он указывает. Убедитесь, что ваш файл rdlc находится в этой папке.

Изменить:
На основе вашего обновленного вопроса и проверки того, что отчет действительно найден. Я посмотрел более подробно на ваш код. Вы устанавливаете параметры для ServerReport, но загружаете отчет в LocalReport. Попытка установить параметры в файле LocalReport.

_reportViewer.LocalReport.SetParameters(report);
person pstrjds    schedule 15.10.2012
comment
@MMDMNC - Вы добавили несколько строк отладки, чтобы проверить, на какой путь он указывает. Здесь вы используете относительный путь в коде. Это будет относительно рабочей папки исполняемого приложения. Я рекомендую проверить, какой фактический путь он ищет. Если вы проверили, какой путь он ищет, то могут быть другие проблемы, но сначала проверьте это. - person pstrjds; 16.10.2012
comment
я использую _reportViewer.LocalReport.SetParameters(отчет); error : Произошла ошибка при обработке локального отчета. - person MMD MNC; 16.10.2012

У меня была такая же проблема сегодня, в моем случае причина "копировать-вставить". Простая замена ServerReport на LocalReport в приведенном ниже коде решила проблему. Изменять

_reportViewer.LocalReport.DataSources.Add(reportDataSource1);

to

_reportViewer.ServerReport.SetParameters(report);
person Romych    schedule 17.08.2016

Вы должны измениться с:

_reportViewer.ServerReport.SetParameters(report); //error

To:

_reportViewer.LocalReport.SetParameters(report);
person Vilmar Oliveira    schedule 28.06.2017

Возможно, ваш отчет является встроенным ресурсом, и поэтому, когда вы пытаетесь установить параметр с помощью _reportViewer.ServerReport.SetParameters(report);//error, ваше определение отчета еще не загружено.

Поэтому, если ваш отчет является встроенным ресурсом, вам нужно вызвать report.LoadReportDefinition(stream); // Get report definition перед установкой параметров отчета.

то есть: ниже возвращает массив байтов PDF из LocalReport

public byte[] ProcessReportToPDFBytes(List<ReportDataSource> rds, Stream stream, string fileName, string outputType, SqlParameter[] rptParameters)
    {
      // Variables 
      Warning[] warnings;
      string[] streamIds;
      string mimeType = string.Empty;
      string encoding = string.Empty;
      string extension = string.Empty;

    using (LocalReport report = new LocalReport())
    {
            // Setup the report viewer object and get the array of bytes 
            report.EnableHyperlinks = true;
            report.EnableExternalImages = true;
            report.SetBasePermissionsForSandboxAppDomain(new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));

            report.LoadReportDefinition(stream); // Get report definition
            // **** Set the Report Parameters AFTER the LoadReportDefinition ****
            if (rptParameters != null)
            {
              foreach (SqlParameter param in rptParameters)
              {
                report.SetParameters(new ReportParameter(param.ParameterName, param.Value == null ? "" : param.Value.ToString(), false));
              }
            }
            foreach (ReportDataSource rds1 in rds)
            {
              report.DataSources.Add(rds1); // Add datasource here 
            }

            // Render the PDF from the local report
            return report.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
    }
}

Надеюсь, что это может помочь другим с этой подобной ошибкой.

person Gwasshoppa    schedule 13.03.2014