2

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

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

4

6 回答 6

9

Put ReportParameter after the

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

here you write your ReportParameter

于 2016-09-15T17:16:05.943 回答
7

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

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

_reportViewer.LocalReport.DataSources.Add(reportDataSource1);
_reportViewer.LocalReport.ReportPath = "../../Report1.rdlc";
_reportViewer.ServerReport.SetParameters(report);
于 2016-07-27T19:28:03.607 回答
3

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

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

_reportViewer.LocalReport.SetParameters(report);
于 2012-10-15T20:14:45.070 回答
1

你应该改变:

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

至:

_reportViewer.LocalReport.SetParameters(report);
于 2017-06-28T22:19:33.153 回答
1

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

_reportViewer.LocalReport.DataSources.Add(reportDataSource1);

_reportViewer.ServerReport.SetParameters(report);
于 2016-08-17T20:24:44.593 回答
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);
    }
}

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

于 2014-03-13T04:58:02.880 回答