【问题标题】:The source of the report definition has not been specified未指定报告定义的来源
【发布时间】:2012-10-15 20:06:21
【问题描述】:

我正在使用以下代码来尝试设置参数:

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

error as : 未指定报告定义的来源

【问题讨论】:

    标签: c#-4.0 report microsoft-reporting


    【解决方案1】:

    将 ReportParameter 放在后面

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

    在这里你写你的 ReportParameter

    【讨论】:

      【解决方案2】:

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

      下面的代码应该可以工作:

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

      【讨论】:

        【解决方案3】:

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

        编辑:
        根据您更新的问题并验证是否确实找到了报告。我更详细地查看了您的代码。您正在为ServerReport 设置参数,但您正在将报告加载到LocalReport 中。尝试在LocalReport 中设置参数。

        _reportViewer.LocalReport.SetParameters(report);
        

        【讨论】:

        • @MMDMNC - 您是否添加了一些调试行来验证它指向的路径。您在此处的代码中使用了相对路径。它将相对于正在执行的应用程序的工作文件夹。我建议验证它正在寻找的实际路径是什么。如果您已经验证了它正在搜索的路径,那么可能还有其他问题,但请先验证。
        • 我正在使用 _reportViewer.LocalReport.SetParameters(report); error : 本地报告处理过程中发生错误。
        【解决方案4】:

        我今天遇到了同样的问题,就我而言,原因是“复制粘贴”问题。 只需在下面的代码中将 ServerReport 替换为 LocalReport 即可解决问题。改变

        _reportViewer.LocalReport.DataSources.Add(reportDataSource1);
        

        _reportViewer.ServerReport.SetParameters(report);
        

        【讨论】:

          【解决方案5】:

          你应该改变:

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

          收件人:

          _reportViewer.LocalReport.SetParameters(report);
          

          【讨论】:

            【解决方案6】:

            您的报告可能是嵌入式资源,因此当您尝试使用_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);
                }
            }
            

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-09-14
              • 1970-01-01
              • 2013-09-29
              • 1970-01-01
              • 2021-11-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多