2010-06-04 28 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