首页 > 解决方案 > C#为一行信息读取/加载多个图像

问题描述

该应用程序应显示多行信息。每行都有一些基本的字符串信息,以及一些参考图像。在 MySQL 数据库中,我有表 A存储基本信息,表 B存储所有图像路径。问题是,现在即使只有 1 行,Reader 读取 3 次并创建 3 个 UserControl 幻灯片,这不是我想要的。下面的简化代码:

string sql = "SELECT a.id, a.name, b.imgPath FROM a INNER JOIN b ON a.id=b.id";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader reader = cmd.ExecuteReader();

While(reader.Read())
{
UserControl userControl= new UserControl();
userControl.idLabel = reader.GetInt32("id").Tostring();
userControl.nameLabel = reader.GetString("name");
string imgPath = reader.GetString("imgPath");
Image img = New Image(...);
stackPanel.Children.Add(userControl);
}

如何解决这个问题?非常感谢 !

标签: c#mysqldatabase

解决方案


不,它不会返回一行,join每个连接对会返回一行,因此您将获得与图片一样多的行。解决方案是检查您是否已经为同一行添加了一个控件,在这种情况下检索它并将新图像添加到控件中,否则像您一样创建新控件。

While(reader.Read())
{

    string id = reader.GetInt32("id").ToString();
    //Check if there is already a userControl for the current item id
    UserControl userControl= stackPanel.Children.OfType<UserControl>().Where(uc => uc.idLabel == id).FirstOrDefault();

    i( userControl == null)
    {
        userControl = new UserControl();
        userControl.idLabel = id.Tostring();
        userControl.nameLabel = reader.GetString("name");
        stackPanel.Children.Add(userControl);
    }
    string imgPath = reader.GetString("imgPath");
    Image img = New Image(...);
    //Add the new image to your control. You haven't show how you add images to it.
}

推荐阅读