2013-03-17 4 views
3

У меня есть DataTable, который имеет сто строк и много столбцов. Один из столбцов - «ImageThumbnail» Я хочу отобразить миниатюру в одном элементе управления по форме. Этот элемент управления ожидает в качестве источника изображения «ImageList». Мне нравится, что мой элемент управления ImageList заполняется из столбца «ImageThumbnail» набора данных. Я мог бы сделать это, используя цикл через все строки в DataTable, но я считаю, что должен быть эффективный метод.Как заполнить ImageList из определенного столбца DataTable?

+1

Вы хотите одновременно отображать изображения из всех строк в одном элементе управления? Что вы пробовали? Покажите свой код. –

ответ

0

После того, как я попробовал это для себя, мне кажется, что это сводится к попытке получить значения из одного DataColumn эффективным способом. После того, как я это понял, я нашел this post, в котором предлагалось 2 решения. Я применил это к моему испытанию для 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 является более емким, но подход Loop, возможно быстрее понять и поэтому более удобным для чтения. Я не уверен, какой из них будет более эффективным, или если они оба получат аналогичный IL-код. Тем не менее, подход LINQ использует встроенные методы AddRange и ToArray, которые могут включать в себя повышение эффективности (или, возможно, в будущем).

Смежные вопросы