在通過我存盤在 SQL Server 資料庫中的資料填充 ListView 時,無論我如何解決這個問題,我試圖填充的 imageList 都不會顯示影像,而是在實際影像所在的位置顯示一個黑色方塊.
我已經嘗試了所有影像串列型別和串列視圖上的視圖型別,但它們都以相同的方式失敗。
這是我嘗試填充它的方式:
public ListView List_Of_Albums(ListView LV)
{
LV.Clear();
LV.Columns.Add("Album Name", 233);
LV.View = View.Details;
ImageList imgs = new ImageList();
LV.SmallImageList = imgs;
LV.BringToFront();
imgs.ImageSize = new Size(108, 93);
LV.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
try
{
ConexionDB();
SqlCommand cmd = new SqlCommand("spSelect_Albums", cnx);
cmd.Connection = cnx;
cmd.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
string[] row =
{
dr.GetValue(2).ToString(),
dr.GetValue(0).ToString(),
dr.GetValue(1).ToString(),
dr.GetValue(3).ToString(),
dr.GetValue(4).ToString(),
dr.GetValue(5).ToString(),
dr.GetValue(6).ToString(),
dr.GetValue(7).ToString(),
dr.GetValue(8).ToString(),
dr.GetValue(9).ToString()
};
try
{
imgs.Images.Add(Image.FromFile(dr.GetValue(4).ToString()));
}
catch (Exception)
{
imgs.Images.Add(Properties.Resources.No_Art);
}
var LVItem = new ListViewItem(row);
LV.Items.Add(LVItem);
}
}
cnx.Close();
return LV;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Database execution error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return LV;
}
}
然而結果總是這樣:

我已經確認用作路徑的字串是有效的,如果我將一個垃圾字串作為源,它確實會給我一個找不到的檔案。
uj5u.com熱心網友回復:
你設定了 LVI 的影像索引了嗎?– TaW
就是這樣,非常感謝,如果有人有類似的問題,這就是我如何使用上面在我的示例中使用的相同 while 回圈分配影像索引的方法。
public ListView List_Of_Albums(ListView LV)
{
int imgCount = 0; // HERE
LV.Clear();
LV.Columns.Add("Album Name", 333);
LV.View = View.LargeIcon;
ImageList imgs = new ImageList();
LV.LargeImageList = imgs;
LV.BringToFront();
imgs.ImageSize = new Size(108, 93);
LV.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
try
{
ConexionDB();
SqlCommand cmd = new SqlCommand("spSelect_Albums", cnx);
cmd.Connection = cnx;
cmd.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
string[] row =
{
dr.GetValue(2).ToString(),
dr.GetValue(0).ToString(),
dr.GetValue(1).ToString(),
dr.GetValue(3).ToString(),
dr.GetValue(4).ToString(),
dr.GetValue(5).ToString(),
dr.GetValue(6).ToString(),
dr.GetValue(7).ToString(),
dr.GetValue(8).ToString(),
dr.GetValue(9).ToString()
};
var LVItem = new ListViewItem(row);
LV.Items.Add(LVItem);
try
{
imgs.Images.Add(Image.FromFile(dr.GetValue(4).ToString()));
LV.Items[imgCount].ImageIndex = imgCount; //counts up
}
catch (Exception)
{
imgs.Images.Add(Properties.Resources.No_Art); // no image if it can't find one
LV.Items[imgCount].ImageIndex = -1;
}
imgCount ;
}
}
cnx.Close();
return LV;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Database execution error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return LV;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/360917.html
上一篇:Flutter:如何從FutureBuilder串列視圖中搜索
下一篇:限制惰性列中的專案
