Один или несколько параметров, необходимых для запуска отчета, не указаны - PullRequest
7 голосов
/ 19 ноября 2008

Я пытаюсь напечатать RDLC-файл напрямую, не показывая Microsoft Report Viewer, я следовал примеру MSDN , но теперь каждый раз, когда я вызываю метод "Render" моего экземпляра класса LocalReport, это выдает «Один или несколько параметров, необходимых для запуска отчета, не указаны». исключение.

Может кто-нибудь сказать мне, какой параметр требуется, что я пропустил? или как я могу найти более подробную информацию об этом исключении?

        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 ]

15 голосов
/ 12 ноября 2010

Я только что обнаружил, если вы передаете значение параметра в виде пустой строки, как параметр = "" это даст вам эту ошибку

заняло у меня некоторое время

5 голосов
/ 14 февраля 2014

Разрешение null в свойствах параметра решит эту проблему.

3 голосов
/ 04 декабря 2015

Причина: локальный отчет не позволяет передавать пустые или нулевые параметры, я не знаю почему, но он выдает исключение.

Исправлено: Один из способов выяснить, какой параметр вызывает исключение, это вызов 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));

Значение состояния AccountParameter для учетной записи будет равно MissingValidValue, что приведет к исключению.

1 голос
/ 14 апреля 2016

Если вам действительно нужно передать пустую строку в качестве значения, вы можете сделать следующее:

  • открыть Свойства параметра (щелкните правой кнопкой мыши ваш параметр на панели «Данные отчета»);
  • установите флажок Разрешить пустое значение ("") .

Это решило все для меня.

0 голосов
/ 05 августа 2017

Это может произойти и в другом случае, если вы используете общие наборы данных и включаете наборы данных, которые не используются в вашем отчете. Каждый отчет должен определять свою собственную версию параметров для каждого общего набора данных локально. Поэтому, если вы включили набор данных в качестве одного из источников данных и не указали явно, как этот конкретный отчет будет передавать параметры в этот набор данных, вы получите эту ошибку.

...