winforms ImageList仅显示一个图像

zxlwwiss  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(129)

我尝试用一个数据库填充一个列表视图,每行显示一个从路径中检索到的图像。它可以工作,并且在行中显示一个图像,但问题是每个列表项都显示相同的图像。所以它使用第一个数据库条目中的图像作为所有条目的图像。下面是检索和显示图像的代码:

DataTable tab = myConn.GetSchema("Tables");
foreach (DataRow row in tab.Rows) {
    Console.WriteLine("{0}", row["TABLE_NAME"].ToString());
}
string mySelectQuery = "Select * from staff";
OdbcCommand command = new OdbcCommand(mySelectQuery, myConn);
OdbcDataReader reader = command.ExecuteReader();
ImageList imgList = new ImageList();
while (reader.Read()) {
    ListViewItem item = new ListViewItem(reader.GetString(0), 0);
    item.SubItems.Add(reader.GetString(1));
    item.SubItems.Add(reader.GetString(2));
    // gets image from path in db
    imgList.Images.Add(Image.FromFile(reader.GetString(3)));
    listView1.SmallImageList = imgList;
    item.SubItems.Add(reader.GetString(4));
    item.ImageIndex = 0;
    listView1.Items.AddRange(new ListViewItem[] { item });
}
2exbekwf

2exbekwf1#

您在所有列表视图中共享同一个imageList对象。您在进入循环之前创建它,然后在每次迭代时,您在末尾添加另一个图像,但您总是告诉每个新的列表视图项使用列表中的第一个图像。由于每次都是同一个列表对象,因此每次都是相同的第一个图像。
您可以为每个项目创建一个新的图像列表:

while (reader.Read()) {
            //  Create a new one each time.
            ImageList imgList = new ImageList();

            ListViewItem item = new ListViewItem(reader.GetString(0), 0);

相关问题