2010-06-04 39 views
2

我有一個類使用一個列表傳遞給ssrs 和每個報告我不得不定義一個類型的列表。 這樣動態列表類型或模式來解決chaning類型問題?

List<ReportClass1> ReportClass1prods; 
public List<ReportClass1> GetReportClass1 
{ 
    get 
    { 
     return ReportClass1prods; 
    } 
} 
List<ReportClass2> ReportClass2prods; 
public List<ReportClass2> GetReportClass2 
{ 
    get 
    { 
     return ReportClass2prods; 
    } 
} 

List<ReportClass3> ReportClass3prods; 
public List<ReportClass3> GetReportClass3 
{ 
    get 
    { 
     return ReportClass3prods; 
    } 
} 

,然後每個人都有自己的功能

public void LoadReport1(List<ReportClass1> products) 
{ 
    ReportClass1prods = products; 
    reportViewer1.Clear(); 
    reportViewer1.Reset(); 
    reportViewer1.ProcessingMode = ProcessingMode.Local; 
    reportViewer1.LocalReport.ReportPath = "Report1.rdlc"; 
    reportViewer1.LocalReport.DataSources.Add(
      new ReportDataSource("ReportClass1", GetReportClass1)); 
    reportViewer1.RefreshReport(); 
} 

反正/什麼是做它,所以我不需要複製和粘貼每個每個列表功能的最好辦法新的報告,但可以動態地找出類型,所以只有1個列表和1個加載函數?

回答

0

檢查其普通類或接口被ReportClass1,2,3源自(或者,如果這些是你的類,而不是某種生成者的,讓它從一個共同的基類或接口派生)。然後使用List<BaseClass>,例如List<ReportClass>

+0

此外,具有這些列表屬性的目的是什麼?你真的需要它們和LoadReport函數嗎?您可以直接將「產品」參數傳遞給新的ReportDataSource(),而不是調用GetReportClass。 此外,請按照命名建議 - 對私人會員使用較低的首字母,對公共屬性使用較低的首字母並讓名稱匹配,例如: 列表 reportClassProducts; 公開名單 ReportClassProducts {...} – 2010-06-04 22:39:09

+0

他們是自定義類,從我所理解你suggesting--公共類ReportClass1:myReportClass {} ,然後通過在列表 ??? – Philip 2010-06-04 23:18:04

+0

好的,是的。但是,即使它是沒有必要的:你可以讓你的LoadReport功能如下所示:LoadReport(IEnumerable的產品),甚至LoadReport(對象產品),因爲根據該http://msdn.microsoft.com/en-us/library/ ms251736(v = VS.80).ASPX ReportDataSource構造函數接受一個對象作爲數據源,只要它實現IEnumerable,或的IDataSource是BindingSource的。這樣你就可以傳入你想要的任何List <>。 – 2010-06-05 00:03:04