[英]ImageList shows only one image
我正在嘗試用數據庫填充listview,每一行都顯示從路徑檢索的圖像。 它可以正常工作,並且在行中顯示圖像,但是問題是每個列表項都顯示相同的圖像。 因此,它將來自第一個數據庫條目的圖像用於所有條目。 這是檢索和顯示圖像的代碼:
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 });
}
您要在所有對象之間共享同一個imageList對象。 您可以在進入循環之前創建它,然后在每次迭代時,都在末尾添加另一個圖像,但是始終告訴每個新的listview項目使用列表中的第一個圖像。 由於每次都是同一列表對象,因此每次都是同一張第一張圖片。
您可以為每個項目創建一個新的圖像列表:
while (reader.Read()) {
// Create a new one each time.
ImageList imgList = new ImageList();
ListViewItem item = new ListViewItem(reader.GetString(0), 0);
或者,您可以對所有圖像使用相同的圖像列表,但是每次將圖像索引增加一,因此每一行都使用自己的圖像。
除了設置ImageIndex
的那一行外,其他所有內容都保持不變。 一定要減去1,這樣一來一張圖像就得到索引0,而兩張圖像則得到索引1,依此類推。
// First one gets image 0, second one image 1, etc.
item.ImageIndex = imgList.Images.Count - 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.