7

Microsoft Report Viewer を表示せずに RDLC ファイルを直接印刷しようとしています。MSDN の例に従いましたが、LocalReport クラスのインスタンスの "Render" メソッドを呼び出すたびに、"One or more parameters required toレポートの実行が指定されていません。」例外。

私が見逃した必要なパラメーターを誰か教えてもらえますか? または、この例外に関する詳細を見つけるにはどうすればよいですか?

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

5 に答える 5

15

parameter = "" のようにパラメーター値を空の文字列として渡すと、そのエラーが発生することを発見しました

少し時間がかかりました

于 2010-11-12T09:39:12.507 に答える
7

パラメーター プロパティで null を許可すると、この問題が解決されます。

于 2014-02-14T19:41:14.457 に答える
3

原因: ローカル レポートでは、空または null のパラメーターを渡すことができません。理由はわかりませんが、例外がスローされます。

修正 : 例外の原因となるパラメーターを特定する 1 つの方法は、メソッドの呼び出し 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 の State 値が MissingValidValue になり、 Exception が発生します。

于 2015-12-04T10:56:28.847 に答える