簡體   English   中英

ImageList僅顯示一張圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM