2009-06-17 9 views
6

estoy creando informe crytal de un procedimiento almacenado, esto funciona bien cuando pase un parámetro pero muestra un errorpaso de parámetros en el informe cristalino

"parámetro incorrecto"

cuando paso dos parámetros mi código es

{ 
    ReportDocument reportDocument = new ReportDocument(); 
    ParameterField paramField = new ParameterField(); 
    ParameterFields paramFields = new ParameterFields(); 
    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); 

    paramField.Name = "@Dept"; 
    paramDiscreteValue.Value = TextBox1.Text.ToString(); 
    paramField.CurrentValues.Add(paramDiscreteValue); 
    paramFields.Add(paramField); 

    paramField.Name = "@Name"; 
    paramDiscreteValue.Value = TextBox2.Text.ToString(); 
    paramField.CurrentValues.Add(paramDiscreteValue); 
    paramFields.Add(paramField); 

    CrystalReportViewer1.ParameterFieldInfo = paramFields; 
    reportDocument.Load(Server.MapPath("CrystalReport.rpt")); 
    CrystalReportViewer1.ReportSource = reportDocument; 
    reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test"); 

} 

por favor hágamelo saber cualquier cambio

+13

Solo para su información, las vocales son gratuitas aquí. – mbillard

Respuesta

2

Asegúrese de que los datos reales que se pasan en los parámetros no se conviertan implícitamente a un tipo de datos incorrecto. Por ejemplo, si está pasando una identificación numérica para el parámetro @Dept, asegúrese de que el tipo de datos del parámetro de entrada que espera recibir el valor también sea de tipo numérico.

+0

no, todo es correcto –

7

Necesita crear un nuevo parámetro Campo y valor para ambos parámetros. Su código actual agrega parámetros, lo modifica (cambia el nombre y el valor) y agrega el mismo objeto nuevamente. Esto debe ser correcta:

{ 
ReportDocument reportDocument = new ReportDocument(); 

ParameterFields paramFields = new ParameterFields(); 
// ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); 

ParameterField paramField = new ParameterField(); 
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); 
paramField.Name = "@Dept"; 
paramDiscreteValue.Value = TextBox1.Text.ToString(); 
paramField.CurrentValues.Add(paramDiscreteValue); 
paramFields.Add(paramField); 

paramField = new ParameterField(); // <-- This line is added 
paramDiscreteValue = new ParameterDiscreteValue(); // <-- This line is added 
paramField.Name = "@Name"; 
paramDiscreteValue.Value = TextBox2.Text.ToString(); 
paramField.CurrentValues.Add(paramDiscreteValue); 
paramFields.Add(paramField); 

CrystalReportViewer1.ParameterFieldInfo = paramFields; 
reportDocument.Load(Server.MapPath("CrystalReport.rpt")); 
CrystalReportViewer1.ReportSource = reportDocument; 
reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test"); 

}

EDIT: error mencionado en el comentario es probablemente porque hay dos definiciones de paramField variable o paramDiscreteValue en el código. En un método C# no puedes definir la variable con el mismo nombre más de una vez. Pruebe el código anterior tal como está escrito y, si todavía está obteniendo el error del compilador, pegue aquí el texto completo del error.

+0

sin su trabajo no hay error que paramField paramDiscreteValue ya están definidos –

+0

Sip. Hay dos definiciones de ParameterDiscreteValue. Voy a comentar línea adicional. – zendar

+0

por favor, escriba el código agn i m nt consiguiendo thnks –

2

intenta crear la ParameterField antes de cada parámetro que se agrega al informe:

paramField = new ParameterField(); 
paramDiscreteValue.Value = ... 
... 
+0

sin su trabajo no hay un error que paramField y paramDiscreteValue ya están definidos –

4

Prueba esto es un poco más concisa

{  
    ReportDocument reportDocument = new ReportDocument(); 

    reportDocument.Load(Server.MapPath("CrystalReport.rpt")); 
    CrystalReportViewer1.ReportSource = reportDocument; 
    reportDocument.SetParameterValue("@Dept", TextBox1.Text.ToString());  
    reportDocument.SetParameterValue("@Name", TextBox2.Text.ToString()); 

// CrystalReportViewer1.ParameterFieldInfo = paramFields; 

    reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test"); 
} 
0

El problema puede ser replicado con Crystal Reports para Visual Studio 2005. La solución provisional consiste en establecer primero la fuente propia de ReportSource del CrystalReportViewer y luego establecer los valores de los parámetros. Por lo tanto, su código debe ser:

{ 
ReportDocument reportDocument = new ReportDocument(); 

CrystalReportViewer1.ReportSource = reportDocument; 

ParameterField paramField = new ParameterField(); 
ParameterFields paramFields = new ParameterFields(); 
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); 

paramField.Name = "@Dept"; 
paramDiscreteValue.Value = TextBox1.Text.ToString(); 
paramField.CurrentValues.Add(paramDiscreteValue); 
paramFields.Add(paramField); 

paramField.Name = "@Name"; 
paramDiscreteValue.Value = TextBox2.Text.ToString(); 
paramField.CurrentValues.Add(paramDiscreteValue); 
paramFields.Add(paramField); 

CrystalReportViewer1.ParameterFieldInfo = paramFields; 
reportDocument.Load(Server.MapPath("CrystalReport.rpt")); 
reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test"); 
} 
Cuestiones relacionadas