报告定义的来源尚未指定(The source of the report definition ha

2019-08-01 12:01发布

我使用下面的代码试图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();

错误为:报告定义的来源尚未指定

Answer 1:

把ReportParameter后

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

在这里,你写你的ReportParameter



Answer 2:

我发现自己坚持了同样的错误,实际上原因很简单:报表定义,必须在第一时间进行设置,参数 。 这样, LocalReport可以检查自己是否真的强制性,并最终抛出异常。

下面的代码应工作:

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


Answer 3:

该错误不相关的参数。 该错误是关系到ReportPath 。 见这等SO问题对于设置报告路径。 你确定你的应用程序运行时您所指定的相对路径是正确的。 相对于你的源代码,这条道路? 如果你想看看它是要找的文件,那么你可以添加一些代码来解决相对路径( Path.GetFullPath ),看看它指向。 确保你的rdlc文件是文件夹中。

编辑:
基于更新的问题,并确定该报告实际上是被人发现。 我看着更详细你的代码。 您的设置参数ServerReport ,但要加载的报告LocalReport 。 试图设置的参数LocalReport

_reportViewer.LocalReport.SetParameters(report);


Answer 4:

今天我有同样的问题,在我的情况的原因“复制 - 粘贴”的问题。 只是LocalReport更换ServerReport在下面的代码解决了这个问题。 更改

_reportViewer.LocalReport.DataSources.Add(reportDataSource1);

_reportViewer.ServerReport.SetParameters(report);


Answer 5:

你应该从改变:

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

至:

_reportViewer.LocalReport.SetParameters(report);


Answer 6:

这可能是您的报告是一个嵌入的资源,因此,当您尝试设置一个参数_reportViewer.ServerReport.SetParameters(report);//error报告定义尚未加载。

因此,如果您的报告是一个嵌入的资源,那么你需要调用report.LoadReportDefinition(stream); // Get report definition report.LoadReportDefinition(stream); // Get report definition设置报表参数之前。

即:以下从LocalReport返回一个PDF字节数组

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);
    }
}

希望这可以帮助别人与此类似的错误。



文章来源: The source of the report definition has not been specified