2010-02-10 184 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