2013-03-17 38 views
3

我有一個數據表,它有一百行和很多列。 其中一列是 - 「ImageThumbnail」 我想在窗體上的一個控件中顯示縮略圖。這個控件需要一個「ImageList」作爲它的圖像源。 所以我喜歡我的ImageList控件從數據集的「ImageThumbnail」列填充。我可以使用循環遍歷DataTable中的所有行,但我相信必須有一些有效的方法。如何從DataTable的特定列填充ImageList?

+1

是否要同時在一個控件中顯示來自所有行的圖像?你有什麼嘗試?請顯示你的代碼。 – 2013-03-17 10:07:44

回答

0

在爲我自己快速嘗試了這個之後,我覺得這歸結爲試圖以有效的方式從單個DataColumn中獲取值。在我意識到這一點之後,我發現this post提出了兩種解決方案。我申請這些我測試ImageLists和我已經包含下面我的代碼:

DataTable dt = new DataTable(); 
dt.Columns.Add("Name", typeof(String)); 
dt.Columns.Add("Image", typeof(Image)); 

dt.Rows.Add("Img1", Properties.Resources.Img_1); 
dt.Rows.Add("Img2", Properties.Resources.Img_2); 
dt.Rows.Add("Img3", Properties.Resources.Img_3); 
dt.Rows.Add("Img4", Properties.Resources.Img_4); 

ImageList imgList = new ImageList(); 

//// Loop Approach: 
//for (int idx = 0; idx < dt.Rows.Count; idx++) 
//{ 
// imgList.Images.Add(dt.Rows[idx]["Image"] as Image); 
//} 

// LINQ Approach: 
imgList.Images.AddRange(dt.Rows.Cast<DataRow>().Select(row => row["Image"] as Image).ToArray()); 

在我看來,LINQ方法更加簡潔,但環方法或許更快地瞭解,因此更具有可讀性。我不確定其中哪一個會更有效率,或者它們是否都以相似的IL代碼結束。但是,LINQ方法使用AddRangeToArray內置方法,可能包括提高效率(或可能在未來)。