2009-10-19 2 views
7

Ich habe versucht, dies für eine Weile zu arbeiten, und alle Beispiel-Code, den ich gesehen habe, sind nicht ganz das, was ich mache.Übergeben von Parametern an Crystal Reports in C#

Ich habe ein Programm, das eine PDF-Datei eines Berichts zurückgibt, an den ich eine Datentabelle übergebe. Das funktioniert gut, außer dass ich ihm ein paar andere Parameter übergeben möchte (den Datumsbereich der Tabelle, Statistiken usw.) und ich kann es einfach nicht zum Laufen bringen. Mein Code sieht im Prinzip so aus.

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; 

Ich habe das Parameterfeld im rpt Dokument im Kristall hinzugefügt, muß ich etwas in der XSD-Datei in C# ändern, oder bin ich etwas ganz anderes fehle?

Vielen Dank, Andy.

Antwort

22

Alle, die Code-Parameter kann mit ...

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

ich, wenn die Bestellung Angelegenheiten erinnern kann nicht ersetzt werden, wenn die Datenquelle und die Parameter einstellen. Vielleicht versuchen Sie zuerst, die Datenquelle zu setzen. Die xsd/Datenquelle hat keine Beziehung zu Kristallparametern.

UPDATE1

SetParameterValue NACH der Datenquelle asignation oder Sie werden Fehler empfangen "Fehlende Parameterwerte."

+1

Ja, das war es! Ich denke, ich habe diese Zeile schon einmal ausprobiert, aber ich habe die Datenquelle an der falschen Stelle gesetzt, als Sie darauf hingewiesen haben. Arbeitet jetzt kompromisslos, danke! –

+0

@Andrew. Könnten Sie mir bitte sagen, wo Sie den Anruf an die DataSource gestellt haben? – Unlimited071

+2

Setzen Sie SetParameterValue AFTER die Datenquelle asignation – 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

Bitte erklären Sie, was Sie behoben haben oder vorschlagen. Einfach Code hinzufügen ist nicht sehr hilfreich. – Priyesh