2012-03-26 58 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接口列表。

從數據集選項(這也是有效的)中獲得的主要好處是,您仍然可以在視圖中使用您的域對象,而不必在數據集行之間進行翻譯。

的缺點是,你與接口污染你的域對象只爲您的視圖的目的