J'ai essayé de faire fonctionner cela pendant un moment et que tout le code que j'ai vu que j'ai vu ne fait pas tout à fait ce que je fais.
J'ai un programme qui retourne un PDF d'un signaler que je passe une table de données à. Cela fonctionne bien, sauf que je voudrais transmettre quelques autres paramètres (la plage de date de la table, des statistiques, etc.) et je ne peux tout simplement pas le faire fonctionner. Mon code ressemble fondamentalement à ceci. P>
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;
5 Réponses :
Tout ce code de paramètre peut être remplacé par ...
// Set datasource first myDataReport.SetDataSource(...) // Assign Paramters after set datasource myDataReport.SetParameterValue("MyParameter", "Hello");
Oui c'était ça! Je pense que j'ai essayé cette ligne auparavant, mais j'ai eu la source de données au mauvais endroit que vous l'avez souligné. Travaille comme étant maintenant, merci!
@Andrew. Pourriez-vous s'il vous plaît dites-moi où avez-vous mis l'appel à la source de données?
Mettez SetParameValue après l'asignation de la DataSource
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();
//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();
Veuillez expliquer ce que vous avez fixé ou suggère. Il suffit d'ajouter du code n'est pas très utile.
rptTeacherTimeTable ttReport = new rptTeacherTimeTable(); DataTable dt = new DataTable(); dt = ObjclsT_TimeTable.GetTimeTableByClass(ClassID); objReport = ttReport; objReport.SetDataSource(dt); objReport.SetParameterValue("RTitle", "Class Time Table"); objReport.SetParameterValue("STitle", "Teacher Time Table"); reportViewer.crystalReportViewer1.ReportSource = objReport; reportViewer.crystalReportViewer1.Show(); reportViewer.Show();
S'il vous plaît, expliquez!
Il suffit de faire une seule chose et votre code s'exécutera automatiquement définir la source de données avant d'ajouter des paramètres ...
crp rpt = new crp(); rpt.SetDataSource(dt); rpt.SetParameterValue("p",p.ToString());