无法在c#中从数据库mysql在Listview中显示图像

时间:2016-02-23 08:44:58

标签: c# listview

我无法在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();
        }
    }
}

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

希望你能帮助我。谢谢

1 个答案:

答案 0 :(得分:0)

我看不到您将IamgeIndex设置为指向ImageList的位置。

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

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

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

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

listView1.Items[23].ImageIndex = 42;

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

listView1.Items[lsvparent].ImageIndex = 0;

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

最好将默认图像作为第一个加载到ImageList,即索引= 0,这样你就可以使用一个普通的图像。