无法在 c# 中从数据库 mysql 的列表视图中显示图像

本文关键字:视图 列表 显示 图像 显示图 数据库 mysql | 更新日期: 2023-09-27 18:35:59

我无法在Listview中显示数据库中的图像,尽管我可以检索一些数据,例如我的标题。

查看我的代码:

public void LoadBooks()
{
    MySqlConnection connection = new MySqlConnection(MyConnectionString);
    connection.Open();
    try
    {
        listView1.Clear();
        ImageList myImageList1 = new ImageList();
        myImageList1.ImageSize = new System.Drawing.Size(80, 80);
        listView1.LargeImageList = myImageList1;

        MySqlCommand cmd = connection.CreateCommand();
        cmd.CommandText = "Select * from booktable";
        MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
        DataTable ds = new DataTable();
        adap.Fill(ds);
        foreach (DataRow dr in ds.Rows)
        {
            byte[] byteBLOBData = (byte[])dr["bookphoto"];
            var stream = new MemoryStream(byteBLOBData);
            Image bookimages= Image.FromStream(stream);
            myImageList1.Images.Add(bookimages);

            ListViewItem lsvparent = new ListViewItem();
            lsvparent.Text = dr["booktitle"].ToString();
            listView1.Items.Add(lsvparent);
        }
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        if (connection.State == ConnectionState.Open)
        {
            connection.Close();
        }
    }
}

虽然图像的大小显示在列表视图中,但任何图像都只是空白图像。

希望你帮助我.谢谢

无法在 c# 中从数据库 mysql 的列表视图中显示图像

我没有看到您在哪里设置指向ImageListIamgeIndex.

它是ListViewItem的属性,您可以在添加时或以后随时设置它。

这会将其设置为列表中的最新图像:

listView1.Items.Add(lsvparent, myImageList1.Image.Count - 1);

要稍后更改它,您可以使用:

listView1.Items[23].ImageIndex = 42;

或者,如果你有好听的名字:

listView1.Items[lsvparent].ImageIndex = 0;

请注意,任何ImageList都限制为一个Size,最大为256x256像素,所有图像都有一个位深度!

最好将

默认图像作为第一个图像加载到ImageList即在索引 = 0 时,这样您就可以回退到一个通用图像中。