您能告诉我在C#win form中将参数传递给Crystal Reports 13的步骤是什么。
我的代码:
//getting and set dataset to report
string sql = "select * from dbo.Trading_Order";
DataRetriever dr = new DataRetriever();
dr.getValueFromCustomer(sql);
DataTable dtSum = dr.getDataTable();
dsMyReprt k = new dsMyReprt();
k.Tables.Remove("dtMyTable");
dtSum.TableName = "dtMyTable";
k.Tables.Add(dtSum);
CrystalReport1 myDataReport = new CrystalReport1();
//pass parameter
ParameterFields paramFields = new ParameterFields();
// ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
ParameterField paramField = new ParameterField();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@DTotal";
paramDiscreteValue.Value = tot;
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
paramField = new ParameterField();
paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@name";
paramDiscreteValue.Value = name;
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
crystalReportViewer1.ParameterFieldInfo = paramFields;
myDataReport.SetDataSource(k);
crystalReportViewer1.ReportSource = myDataReport;
获取和设置数据集部分正在运行 但传递参数部分不起作用
答案 0 :(得分:6)
我对此感到头疼几周...我必须确切地说我在Crystal Reports Designer中设置了一个sql查询。因此,我没有像你那样使用dataTable,所以你必须考虑这一点。
好吧,@ campagnolo_1建议你:
ReportDocument myDataReport = new ReportDocument();
myDataReport.Load(@"C:\Reports\Report.rpt");
myDataReport.SetParameterValue("MyParameter1", "Hello1");
myDataReport.SetParameterValue("MyParameter2", "Hello2");
myDataReport.SetParameterValue("MyParameter3", "Hello3");
这是短暂而甜蜜的解决方案。但是,在此之后,您必须确保在Crystal Reports设计器中创建了类型为String的MyParameter1
,MyParameter2
和MyParameter3
。
在使用SetParameterValue
设置参数之前,必须先加载报告,这一点非常重要。
如果您的参数名称为MyParameter1
,那么请不要在前面添加@
,如下所示:
myDataReport.SetParameterValue(" @ MyParameter1"," Hello1"); //你的程序会崩溃。
如果你有The parameter is incorrect
,那么你应该确保你给出的参数值类型与参数类型完全相同。例如,如果您将参数StartDate
作为日期类型,那么请确保您提供的值是Date类型并具有正确的日期格式。
另外,您已经讨论过动态或静态字段。在您的情况下,我认为您手动输入值,然后这是静态字段。
希望这会对你有所帮助。
答案 1 :(得分:2)
你现在可能已经找到了解决方案。但这可能会有所帮助。输入作为参数传递的值。
http://www.codeproject.com/Tips/753879/Automatically-Setting-a-Parameter-from-a-Csharp-Va
答案 2 :(得分:0)
为什么不以这种方式尝试并节省一些编码?
ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
myDataReport.Load(@"C:\Reports\Report.rpt");
myDataReport.SetParameterValue("MyParameter1", "Hello1");
myDataReport.SetParameterValue("MyParameter2", "Hello2");
myDataReport.SetParameterValue("MyParameter3", "Hello3");