我尝试用一个数据库填充一个列表视图,每行显示一个从路径中检索到的图像。它可以工作,并且在行中显示一个图像,但问题是每个列表项都显示相同的图像。所以它使用第一个数据库条目中的图像作为所有条目的图像。下面是检索和显示图像的代码:
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 });
}
1条答案
按热度按时间2exbekwf1#
您在所有列表视图中共享同一个imageList对象。您在进入循环之前创建它,然后在每次迭代时,您在末尾添加另一个图像,但您总是告诉每个新的列表视图项使用列表中的第一个图像。由于每次都是同一个列表对象,因此每次都是相同的第一个图像。
您可以为每个项目创建一个新的图像列表: