尚未指定运行报告所需的一个或多个参数

时间:2008-11-19 11:58:47

标签: printing reportviewer rdlc

我正在尝试直接打印RDLC文件而不显示Microsoft Report Viewer,我已经关注了MSDN's example但是现在,每当我调用LocalReport类实例的“Render”方法时,它都会抛出“尚未指定运行报告所需的一个或多个参数。“异常。

有谁能告诉我错过了哪个参数?或者如何找到有关此例外的更多详细信息?

        LocalReport report = new LocalReport();
        report.ReportPath = System.Windows.Forms.Application.StartupPath + "\\" + rdlcFileName;
        report.EnableExternalImages = true;

        ReportParameter[] reportParams = new ReportParameter[]
        {
            new ReportParameter("LogoAddress", settings.LogoFileName),
            new ReportParameter("FooterValue", settings.InvoicesFooter)
        };
        report.SetParameters(reportParams);

        report.DataSources.Add(new ReportDataSource("Invoice", new PrintableInvoice[] { invoice }));
        report.DataSources.Add(new ReportDataSource("InvoiceItem", invoiceItems));

        Warning[] warnings;
        try
        {
            string deviceInfo =
                "<DeviceInfo>" +
                "  <OutputFormat>EMF</OutputFormat>" +
                "  <PageWidth>8.5in</PageWidth>" +
                "  <PageHeight>11in</PageHeight>" +
                "  <MarginTop>0.25in</MarginTop>" +
                "  <MarginLeft>0.25in</MarginLeft>" +
                "  <MarginRight>0.25in</MarginRight>" +
                "  <MarginBottom>0.25in</MarginBottom>" +
                "</DeviceInfo>";

            m_streams = new List<Stream>();
            report.Render("Image", deviceInfo, _CreateStream, out warnings);

            foreach( Stream stream in m_streams )
                stream.Position = 0;
        }
        catch( Exception ex )
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }

和_CreateStream是:

    private Stream _CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
    {
        Stream stream = new FileStream(name + "." + fileNameExtension, FileMode.Create);
        m_streams.Add(stream);
        return stream;
    }

5 个答案:

答案 0 :(得分:15)

我刚刚发现你是否将参数值作为空字符串传递,如parameter =“” 它会给你那个错误

花了我一会儿

答案 1 :(得分:5)

在参数属性中允许null将解决此问题。

答案 2 :(得分:3)

原因:本地报告不允许您传递空参数或空参数,我不知道为什么会引发异常。

修复:找出导致异常的参数的一种方法是调用  var result = report.LocalReport.GetParameters(); 方法,在其具有的参数结果数组中 result[0].State 财产,如果它的价值 MissingValidValue 它会导致异常。

示例:

 var rv = new ReportViewer { ProcessingMode = ProcessingMode.Local };
        rv.LocalReport.ReportPath = Server.MapPath("~/PrintForms/FromForm.rdlc");
        rv.LocalReport.Refresh();

        string mimeType;
        string encoding;
        string filenameExtension;
        string[] streamids;
        Warning[] warnings;

        rv.LocalReport.SetParameters(new ReportParameter("ClientName", "გიორგი გიორგაძე"));
        rv.LocalReport.SetParameters(new ReportParameter("Account", "888"));var streamBytes = rv.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);
        return File(streamBytes, mimeType);

上面的代码工作正常,但如果您将参数添加行更改为:

rv.LocalReport.SetParameters(new ReportParameter("Account", null));

帐户ReportParameter的状态值为MissingValidValue,它会导致异常。

答案 3 :(得分:1)

如果您确实需要将空字符串作为值传递,则可以执行以下操作:

  • 打开参数属性(右键单击“报表数据”面板上的参数);
  • 标记允许空白值(&#34;&#34;)复选框。

这解决了我的问题。

答案 4 :(得分:0)

另一种方法是,如果您使用的是共享数据集,并且包含报表未使用的DataSet。每个报告必须在本地为每个共享数据集定义自己的参数版本。因此,如果您已将数据集作为数据源之一并且未明确定义此特定报告如何将参数传递给该数据集,则会出现此错误。