2010-02-10 185 views
1

那么我有一个Cyrstal报告,它有4个子报告,它通过ItemID列和Culture关联,所以它有一个参数值“?Pm-ItemID”和“?Pm-Culture”现在我使用DataSet将数据加载到Crystal Report的数据源,当我运行报告给我一个错误,这是一个询问参数字段没有被支持,所以我想我的问题将是我要传递给什么那些ParameterFields?C#的水晶报告

这是一个想法。

ReportDocument myreport = new ReportDocument(); 
myreport.Load("C:\MyReport.rpt"); 
DataSet ds = GenerateReportData(); 
myreport.SetDataSource(ds); 

//Loop through each to Load the DataSet 
for (int i = 0; i < myreport.Subreports.Count; i++) 
{ 
    ReportDocument subreport = myreport.SubReports[i]; 
    DataSet subds = GenerateReportData(subreport.name) 
    subreport.SetDataSource(subds); 
} 

//I can see that there's a parameterfields in myreport.ParameterFields 
//As I look through inside it there are 8 ParameterFields repeating Pm-ItemID and Pm-Culture 
foreach (ParameterField pf in myreport.ParameterFields) 
{ 
    myreport.SetParameterValue(pf.Name, Value???); 
} 

回答

1

那么,我明白了什么是错的。

ReportDocument subreport = myreport.SubReports[i]; 
DataSet subds = GenerateReportData(subreport.name) 
subreport.SetDataSource(subds); 

不应该做的这种方式,它应该是

DataSet subds = GenerateReportData(subreport.name) 
myreport.SubReports[i].SetDataSource(subds); 
+0

我忘记了这是一个com对象,它可能不支持oop。 – Juvil 2010-02-10 01:45:47

0

我不知道水晶,但在SSRS它的工作原理是这样的:

1)创建一个子报表,并创建一些参数

2)创建主报告,把那里的子报表,并在属性中,你可以指定绑定到子报表参数

结论:我不认为这应该设置在代码中,而是设置报表设计器。

+0

它在报表设计器设置,它与MainItemReport.ItemID挂SubItemReport.ItemID等,但由于报告运行它要求的价值?Pm-ItemID和?Pm-Culture – Juvil 2010-02-10 01:08:40

+0

正如你所看到的,我认为通过每个子报表设置数据集是足够的,注意到foor循环,但随着它的发展,我得到一个错误一些没有价值的参数字段。 – Juvil 2010-02-10 01:14:39