Передача параметров в crystal reports в C#
Я пытался заставить это работать некоторое время, и весь пример кода, который я видел, не совсем делает то, что я делаю.
У меня есть программа, которая возвращает pdf отчета, в который я передаю таблицу данных. Это отлично работает, за исключением того, что я хотел бы передать ему пару других параметров (диапазон дат таблицы, статистика и т. д.), и я просто не могу заставить его работать. Мой код выглядит примерно так.
ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
myDataReport.Load(@"C:LayoutsReport.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;
Я добавил поле параметра в документ rpt в Кристал, мне нужно что-то изменить в XSD-файле на c#, или я пропустил что-то совершенно другое?
4 ответов
весь этот код параметра можно заменить...
// Set datasource first
myDataReport.SetDataSource(...)
// Assign Paramters after set datasource
myDataReport.SetParameterValue("MyParameter", "Hello");
Я не могу вспомнить, имеет ли значение порядок при настройке источника данных и параметров. Возможно, сначала попробуйте установить источник данных. Xsd / datasource не имеет никакого отношения к параметрам кристалла.
обновление 1
SetParameterValue после asignation источника данных или вы получите ошибку " отсутствующие значения параметров."
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();