尚未指定报告定义的来源

时间:2012-10-15 20:06:22

标签: c#-4.0 report microsoft-reporting

我正在使用以下代码尝试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();

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

6 个答案:

答案 0 :(得分:5)

将ReportParameter放在

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

在这里编写ReportParameter

答案 1 :(得分:3)

我发现自己陷入了同样的错误,原因其实很简单:首先必须设置报表定义,之前参数。这样,LocalReport可以检查它们是否真的是强制性的并最终抛出异常。

以下代码应该有效:

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

答案 2 :(得分:2)

错误与您的参数无关。该错误与ReportPath有关。有关设置报告路径的信息,请参阅this other SO question。您确定应用程序运行时指定的相对路径是否正确。该路径是相对于您的源代码的吗?如果您想查看它在哪里查找文件,那么您可以添加一些代码来解析该相对路径(Path.GetFullPath)并查看其指向的位置。确保您的rdlc文件位于该文件夹中。

修改
根据您更新的问题并验证是否确实找到了报告。我在你的代码中查看了更多细节。您正在设置ServerReport的参数,但是您要在LocalReport中加载报告。尝试在LocalReport中设置参数。

_reportViewer.LocalReport.SetParameters(report);

答案 3 :(得分:1)

我今天遇到了同样的问题,在我的情况下,原因是#34; copy-paste"问题。 在下面的代码中用LocalReport替换ServerReport解决了这个问题。变化

_reportViewer.LocalReport.DataSources.Add(reportDataSource1);

_reportViewer.ServerReport.SetParameters(report);

答案 4 :(得分:1)

你应该改变:

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

要:

_reportViewer.LocalReport.SetParameters(report);

答案 5 :(得分:0)

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

因此,如果您的报告是嵌入式资源,则需要在设置报告参数之前致电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);
    }
}

希望这可以帮助其他人解决这个类似的错误。