2009-10-19 8 views
7

J'ai essayé de faire fonctionner cela pendant un certain temps, et tout le code d'exemple que j'ai vu ne fait pas tout à fait ce que je fais.Passer des paramètres à des rapports de cristal en C#

J'ai un programme qui retourne un pdf d'un rapport que je passe une table de données. Cela fonctionne bien, sauf que je voudrais lui passer quelques autres paramètres (la plage de dates de la table, les statistiques, etc) et je ne peux tout simplement pas le faire fonctionner. Mon code ressemble à ceci.

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; 

J'ai ajouté le champ de paramètre dans le document rpt en cristal, dois-je changer quoi que ce soit dans le fichier xsd en C#, ou suis-je manque quelque chose de complètement différent?

Merci beaucoup, Andy.

Répondre

22

Tout ce code paramètre peut être remplacé par ...

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

Je ne me souviens pas si les questions d'ordre lors de la configuration et des paramètres de la source de données. Peut-être essayez de définir la source de données en premier. La source xsd/datas n'a aucune relation avec les paramètres de cristal.

Update1

SetParameterValue APRÈS la source de données asignation ou vous recevez une erreur "manquant des valeurs de paramètres."

+1

Eh oui c'est tout! Je pense que j'ai essayé cette ligne auparavant, mais j'avais la source de données au mauvais endroit comme vous l'avez indiqué. Fonctionne maintenant compeletly, merci! –

+0

@Andrew. Pourriez-vous me dire où avez-vous passé l'appel à dataSource? – Unlimited071

+2

Mettez SetParameterValue APRÈS l'apposition de la source de données – 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

Veuillez expliquer ce que vous avez corrigé ou ce que vous suggérez. Juste ajouter du code n'est pas très utile. – Priyesh

Questions connexes