如何动态填充Imagelist(数据库中的数据)C#

时间:2016-11-30 05:43:55

标签: c#

我需要动态填充ImageList。意味着我将image names存储在数据库表中。但是图像位于项目文件夹(1.jpg, 2.jpg...)内的类别文件夹中,使用while循环我尝试将图像添加到ImageList并绑定到ListView

这是我的代码和TABLE。没有错误,但图像没有加载。我不确定图像路径是否正确。我的代码有什么问题,怎么做?

public void show()
{
    ImageList imgs = new ImageList();
    imgs.ImageSize = new Size(50,50);

    MySqlConnection con = cn.connection();
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "SELECT * FROM categories";
    MySqlDataReader rd;
    con.Open();
    rd = cmd.ExecuteReader();
    while (rd.Read())
    {
        try
        {
            imgs.Images.Add(Image.FromFile("./categories/" + rd.GetString(2)));
        }
        catch (Exception e) {
            MessageBox.Show(e.Message);
        }
    }
    listView1.SmallImageList = imgs;
    while (rd.Read())
    {
        listView1.Items.Add("asas",rd.GetString(0));
    }
}

图像路径

C:\vb\nishantha\pos3\categories

项目文件夹

enter image description here

图片文件夹

enter image description here

2 个答案:

答案 0 :(得分:0)

试试这个

imgs.Images.Add(Bitmap.FromFile("\\categories\\" + rd.GetString(2)));

可能会帮助您实现它并且下一个while循环可能是一个问题,因为运行第一个循环已经读取了DB中的所有记录。所以,如果你想要,你可以在第一个循环中包含相同的内容。

listViewItem lvi = new listViewItem();
while (rd.Read())
{
    try
    {
        imgs.Images.Add(Bitmap.FromFile("\\categories\\" + rd.GetString(2)));
        lvi.SubItems.Add(rd.GetString(0));
    }
    catch (Exception e) {
        MessageBox.Show(e.Message);
    }
}
listView1.Items.Add(lvi);
listView1.SmallImageList = imgs;

答案 1 :(得分:0)

确保根文件目录中包含带文件的类别文件夹。

e.g。如果您在调试模式下构建应用程序,则类别文件夹和文件应位于〜/ debug / categories / .. jpg中。为此,请采取以下步骤:

展开类别文件夹,选择所有文件 - >右键单击 - >财产 - > CopyToOutputDirectory始终复制。

最后在列表视图中添加项目的最后一行更改以下代码:

while (rd.Read())
{
   listView1.Items.Add("asas",rd.GetString(0));
}

for (int j = 0; j < imgs.Images.Count; j++)
{
    ListViewItem item = new ListViewItem();
    item.ImageIndex = j;
    item.Text = "asdf";

    this.listView1.Items.Add(item);
}