2009-10-19 45 views
7

He estado tratando de hacer que esto funcione por un tiempo, y todo el código de ejemplo que he visto no está haciendo exactamente lo que estoy haciendo.Pasando los parámetros a los informes de cristal en C#

Tengo un programa que devuelve un pdf de un informe al que paso una tabla de datos. Esto funciona bien, excepto que me gustaría pasarle un par de otros parámetros (el rango de fechas de la tabla, estadísticas, etc.) y simplemente no puedo hacer que funcione. Mi código básicamente se ve así.

ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument(); 
myDataReport.Load(@"C:\Layouts\Report.rpt"); 
ParameterField myParam = new ParameterField(); 
ParameterDiscreteValue myDiscreteValue = new ParameterDiscreteValue(); 
myParam.ParameterFieldName = "MyParameter"; 
myDiscreteValue.Value = "Hello"; 
myParam.CurrentValues.Add(myDiscreteValue); 
myDataReport.ParameterFields.Add(myParam); 
myDataReport.SetDataSource(myDataTable); 
Stream returnData = myDataReport.ExportToStream(PortableDocFormat); 
myDataReport.Close(); 
return returnData; 

He añadido el campo de parámetro en el documento rpt en cristal, tengo que cambiar nada en el archivo xsd en C#, o me estoy perdiendo algo completamente diferente?

Muchas gracias, Andy.

Respuesta

22

Todo lo que los códigos de parámetros pueden ser sustituidos por ...

// Set datasource first 
myDataReport.SetDataSource(...) 
// Assign Paramters after set datasource 
myDataReport.SetParameterValue("MyParameter", "Hello"); 

No puedo recordar si las cuestiones de orden al configurar el origen de datos y parámetros. Tal vez intente configurar el origen de datos primero. Xsd/datasource no tiene relación con los parámetros de cristal.

Update1

SetParameterValue DESPUÉS de la fuente de datos asignation o va a recibir el error "Falta valores de los parámetros."

+1

Sí eso fue todo! Creo que probé esa línea antes, pero tenía el origen de datos en el lugar equivocado como usted señaló. Funciona ahora, ¡gracias! –

+0

@Andrew. ¿Podría decirme por favor dónde puso la llamada a dataSource? – Unlimited071

+2

Ponga SetParameterValue DESPUÉS de la asignación del origen de datos – Apocatastasis

3
ReportDocument cryRpt = new ReportDocument(); 

TableLogOnInfos crtableLogoninfos = new TableLogOnInfos(); 
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo(); 
ConnectionInfo crConnectionInfo = new ConnectionInfo(); 
Tables CrTables; 

string path = "C:/reportpath/report.rpt"; 
cryRpt.Load(path); 

cryRpt.SetParameterValue("MyDate2", str2); 
cryRpt.SetParameterValue("MyDate", str1); 

crConnectionInfo.ServerName = "server"; 
crConnectionInfo.DatabaseName = "DataBase"; 
crConnectionInfo.UserID = "user"; 
crConnectionInfo.Password = "password"; 

CrTables = cryRpt.Database.Tables; 
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) 
{ 
    crtableLogoninfo = CrTable.LogOnInfo; 
    crtableLogoninfo.ConnectionInfo = crConnectionInfo; 
    CrTable.ApplyLogOnInfo(crtableLogoninfo); 
} 

crystalReportViewer1.ReportSource = cryRpt; 
crystalReportViewer1.Refresh(); 
1
 //create object of crystal report. 
     CrystalReport1 objRpt = new CrystalReport1(); 
     objRpt.SetDataSource(ds); 
     ParameterFields pfield = new ParameterFields(); 
     ParameterField ptitle = new ParameterField(); 
     ParameterDiscreteValue pvalue = new ParameterDiscreteValue(); 
     ptitle.ParameterFieldName = "date"; 
     pvalue.Value = txtcolor.Text; 
     ptitle.CurrentValues.Add(pvalue); 
     pfield.Add(ptitle); 
     crystalReportViewer1.ParameterFieldInfo = pfield; 
     crystalReportViewer1.ReportSource = objRpt; 
     crystalReportViewer1.Refresh(); 
+2

Explique qué ha arreglado o está sugiriendo. Solo agregar código no es de mucha ayuda. – Priyesh

Cuestiones relacionadas