[英]Passing parameters to crystal reports in C#
I've been trying to get this to work for a while, and all the example code I've seen aren't quite doing what I'm doing. 我一直在尝试使它工作一段时间,而我所看到的所有示例代码都没有完全按照我的意思做。
I have a program that returns a pdf of a report that I pass a data table to. 我有一个程序,该程序返回将数据表传递给的报告的pdf。 This works fine, except I would like to pass it a couple of other parameters (the date range of the table, stats etc) and I just can't get it to work. 效果很好,除了我想将其他几个参数(表格的日期范围,统计信息等)传递给它,而我却无法使其正常工作。 My code basically looks like this. 我的代码基本上是这样的。
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;
I have added the parameter field in the rpt document in crystal, do I have to change anything in the xsd file in c#, or am I missing something completely different? 我已经在crystal的rpt文档中添加了parameter字段,是否必须在c#的xsd文件中进行任何更改,还是缺少一些完全不同的东西?
Many thanks, Andy. 非常感谢,安迪。
All that parameter code can be replaced with... 所有这些参数代码都可以替换为...
// Set datasource first
myDataReport.SetDataSource(...)
// Assign Paramters after set datasource
myDataReport.SetParameterValue("MyParameter", "Hello");
I can't remember if the order matters when setting the datasource and parameters. 我不记得设置数据源和参数时顺序是否重要。 Maybe try setting the datasource first. 也许先尝试设置数据源。 The xsd/datasource has no relation to crystal parameters. xsd /数据源与晶体参数无关。
UPDATE1 更新1
SetParameterValue AFTER the datasource asignation or you will recieve error "Missing parameter values." 数据源分配后返回SetParameterValue,否则将收到错误“缺少参数值”。
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();
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();
just do one thing and your code will run automatically set the data source first before adding parameters... 只需做一件事,您的代码就会在添加参数之前先自动运行自动设置数据源...
crp rpt = new crp();
rpt.SetDataSource(dt);
rpt.SetParameterValue("p",p.ToString());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.