2008-11-19 47 views
6

Estoy tratando de imprimir un archivo RDLC directamente sin mostrar Microsoft Report Viewer, he seguido el MSDN's example pero ahora, cada vez que llamo al método "Render" de mi instancia de la clase LocalReport arroja el "Uno o más parámetros necesarios para ejecutar el informe no se han especificado". excepción.Uno o más parámetros necesarios para ejecutar el informe no se han especificado

¿Alguien me puede decir qué parámetro es necesario que haya omitido? o ¿cómo puedo encontrar más detalles sobre esta excepción?

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

y la _CreateStream es:

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; 
    } 
+1

respuesta encontrado en: http://social.msdn.microsoft.com/Forums/zh/vsreportcontrols/thread/7cce3c91-f876-417a-81cc-10e10dde0e40 – MilkyWayJoe

Respuesta

15

acabo de descubrir si se pasa el valor del parámetro como una cadena vacía como parámetro = "" que le dará ese error

Me tomó un tiempo

+1

Gracias! Eso me hubiera llevado años para descubrirlo, probablemente. :) (acaba de recibir exactamente el mismo error) –

+0

¿Cuál es la solución si realmente quiero pasar cadena vacía? – JoshNaro

5

Permitir nulo en las propiedades de los parámetros resolverá este problema.

3

Causa: El informe local no le permite pasar parámetros vacíos o nulos, no sé por qué pero arroja una excepción.

Fix: Una forma de averiguar qué parámetro causa la excepción es llamar var result = report.LocalReport.GetParameters(); método, en el campo de resultados de los parámetros que tiene result[0].State propiedad, si se trata de valor MissingValidValue que causa la excepción.

Ejemplo:

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

Código anterior funciona bien, pero si cambia el parámetro de línea añadiendo a:

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

valor de estado de cuenta ReportParameter sería MissingValidValue y que causaría la excepción.

+2

Esta debería ser la respuesta aceptada. – BG100

1

Si usted realmente necesita para pasar una cadena en blanco como valor, que puede hacer el folowing:

  • abierta parámetro Properties (clic derecho sobre el parámetro en el panel Datos de informe);
  • marque el Permitir el valor en blanco ("") casilla de verificación.

Esto me ha solucionado las cosas.

+0

Esta debería ser la respuesta aceptada, en realidad ofrece una solución. – dyrssen

0

Otra forma en que esto puede suceder es si está utilizando conjuntos de datos compartidos e incluye DataSets que su informe no está usando. Cada informe debe definir su propia versión de los parámetros para cada Dataset compartido localmente. Entonces, si ha incluido un conjunto de datos como uno de sus orígenes de datos y no ha definido explícitamente cómo este informe en particular transferirá los parámetros a ese conjunto de datos, obtendrá este error.

Cuestiones relacionadas