2012-03-26 60 views
0

我有不同对象的两个列表:合并和两个列表绑定到一个GridView

List<Report> 
List<Newsletter> 

每一个都具有“创建日期”属性。我需要按降序对两个列表的创建日期进行排序,并将其绑定到一个gridview。

如何做到这一点,因为我只能提供一个数据源?

回答

3

你可以先创建日期的List

var rows = reports.Select(x => x.CreateDate).Union(news.Select(x => x.CreateDate)).OrderByDescending(x => x.Date).ToList(); 

然后用DataTable结构结合:

DataTable dt = new DataTable(); 
dt.Columns.Add("Date"); 

foreach (var row in rows) { 
    dt.Rows.Add(row); 
} 
grid.DataSource = dt; 
+0

在这里,我将只获得绑定到网格视图的日期时间值。我需要将名称,日期和状态绑定到网格。我如何选择使用lambda表达式的3个属性? – NewBie 2012-03-26 09:30:17

+0

您可以选择匿名对象而不仅仅是日期 – ionden 2012-03-26 10:04:23

+0

明白了。匿名对象完成了这项工作。谢谢。 – NewBie 2012-03-26 10:34:21

0

如果两种类型有你想要显示相同的属性,那么你可以创建他们都实现的接口。那么你的观点可以有以下几点。

伪代码:

List<IDisplayReportsAndNewsletter> data = new List<IDisplayReportsAndNewsletter>(); 

data.Addrange(reports); 

data.Addrange(newsletters); 

grid.Datasource = data.OrderBy(d => d.CreatedDate).ToList(); 

其中报告和简报是你描述上面对类现在实现新IDisplayReportsAndNewsletter接口列表。

从数据集选项(这也是有效的)中获得的主要好处是,您仍然可以在视图中使用您的域对象,而不必在数据集行之间进行翻译。

的缺点是,你与接口污染你的域对象只为您的视图的目的