如何从DataTable的特定列填充ImageList?

时间:2013-03-17 10:03:31

标签: c# datatable windows-applications timagelist

我有一个DataTable,它有几百行和多列。 其中一列是 - “ImageThumbnail” 我想在表单上的一个控件中显示缩略图。此控件需要“ImageList”作为其图像源。 所以我喜欢我的ImageList控件从数据集的“ImageThumbnail”列填充。我可以使用循环遍历DataTable中的所有行来完成它,但我相信必须有一些有效的方法。

1 个答案:

答案 0 :(得分: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方法更简洁,但循环方法可能更快理解,因此更具可读性。我不确定哪一个会更有效率,或者它们最终都是类似的IL代码。但是,LINQ方法使用AddRangeToArray内置方法,这些方法可能包括效率改进(或将来可能会这样做)。