Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从数据表的特定列填充ImageList?_C#_Datatable_Windows Applications_Timagelist - Fatal编程技术网

C# 如何从数据表的特定列填充ImageList?

C# 如何从数据表的特定列填充ImageList?,c#,datatable,windows-applications,timagelist,C#,Datatable,Windows Applications,Timagelist,我有一个DataTable,它有一百行和许多列。 其中一列是“ImageThumbnail” 我想在窗体上的一个控件中显示缩略图。此控件需要一个“ImageList”作为其图像源。 所以我喜欢从数据集的“ImageThumbnail”列填充ImageList控件。我可以使用循环遍历DataTable中的所有行来完成此操作,但我相信一定有一些有效的方法。在我自己快速尝试之后,我觉得这归结为尝试以有效的方式从单个数据列中获取值。在我意识到这一点后,我找到了两种解决方案。我将这些应用于我对图像列表的测

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

在我自己快速尝试之后,我觉得这归结为尝试以有效的方式从单个
数据列中获取值。在我意识到这一点后,我找到了两种解决方案。我将这些应用于我对
图像列表的测试中,并将我的代码包括在下面:

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());
DataTable dt=newdatatable();
添加(“名称”,类型(字符串));
添加(“图像”,类型(图像));
添加(“Img1”,Properties.Resources.Img_1);
添加(“Img2”,Properties.Resources.Img_2);
dt.Rows.Add(“Img3”,Properties.Resources.Img_3);
添加(“Img4”,Properties.Resources.Img_4);
ImageList imgList=新的ImageList();
////循环方法:
//for(int idx=0;idxrow[“Image”]作为Image.ToArray());

在我看来,LINQ方法更简洁,但循环方法可能更容易理解,因此更具可读性。我不确定其中哪一个会更有效,或者它们是否最终都使用类似的IL代码。但是,LINQ方法使用
AddRange
ToArray
内置方法,这些方法可能包括效率改进(或者将来可能会这样做)。

是否要同时在一个控件中显示所有行的图像?你试过什么?请出示你的密码。