【问题标题】:How to fill ImageList from a particular column of a DataTable?如何从 DataTable 的特定列填充 ImageList?
【发布时间】:2013-03-17 10:03:31
【问题描述】:

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

【问题讨论】:

  • 您想在一个控件中同时显示所有行的图像吗?你试过什么?请出示您的代码。

标签: c# datatable windows-applications timagelist


【解决方案1】:

在为自己快速尝试后,在我看来,这归结为尝试以​​有效的方式从单个 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 内置方法,其中可能包括效率改进(或将来可能会这样做)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多