C# 数据网格视图将源与图像路径绑定(如果不存在)



你好,我有一个问题,我使用绑定源将数据获取到数据网格视图,我的代码是下面的;

string query= "SELECT a.id as id1,a.id2, a.system_id, CONCAT(b.path,a.image) as photo ,b.id as id5,b.name,b.path  FROM users a INNER JOIN systems b ON a.system_id=b.id  order by a.id DESC LIMIT 20";
            using (MySqlCommand cmd = new MySqlCommand(query, conn))
            {
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                var dt = new System.Data.DataTable();
                da.Fill(dt);
                bindingSource1.DataSource = dt.Rows.Cast<DataRow>().Select(p => new aclass() { id = (p["id1"].ToString()),  Photo= Image.FromFile(p["photo enter code here"].ToString()) }).ToList();
                conn.Close();

            }

此函数获取图像路径并添加到列表中并在带有照片的 datagridview 中显示,但我的问题是如果删除此照片没有显示错误,如何制作是否删除此照片添加一个照片头像默认值。如果存在显示原始照片的照片。Thnks

您需要先检查文件是否存在,然后从路径或头像路径加载它。

string avaterPath=@"D:ImagesNoImage.png";
string query= "SELECT a.id as id1,a.id2, a.system_id, CONCAT(b.path,a.image) as photo ,b.id as id5,b.name,b.path  FROM users a INNER JOIN systems b ON a.system_id=b.id  order by a.id DESC LIMIT 20";
            using (MySqlCommand cmd = new MySqlCommand(query, conn))
            {
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                var dt = new System.Data.DataTable();
                da.Fill(dt);
                bindingSource1.DataSource = dt.Rows.Cast<DataRow>().Select(p => new aclass() { id = (p["id1"].ToString()),  Photo=File.Exists(p["photo enter code here"].ToString())? Image.FromFile(p["photo enter code here"].ToString()):Image.FromFile(avaterPath) }).ToList();
                conn.Close();

            }

您需要先检查文件是否存在,然后从路径或头像路径加载它。您可以使用以下帮助程序函数:

private string LoadImage(string imagePath) {
  return Image.FromFile(MapImagePath(imagePath));
}
private string MapImagePath(string imagePath) {
  if (string.IsNullOrEmpty(imagePath))
    imagePath = GetNoImagePath();
  else {
    if (!File.Exists(imagePath))
      imagePath = GetNoImagePath();
  }
  return imagePath;
}
private string GetNoImagePath() {
  return "D:ProjectFolderImagesNoImage.png";
}

现在你可以像这样从代码中调用它们:

var data = dt.Rows.Cast<DataRow>().Select(p => new aclass() {
  id = (p["id1"].ToString()),
  Photo = LoadImage(p["photo enter code here"].ToString())
}).ToList();

注意:当然,您可以将头像的路径设置为常量而不是函数。如果您有多个头像,并且想根据某些条件返回其中一个,则该函数可能很有用。

谢谢大家,这是我的解决方案;

 string avaterPath=@"D:ImagesNoImage.png";
string query= "SELECT a.id as id1,a.id2, a.system_id, CONCAT(b.path,a.image) as photo ,b.id as id5,b.name,b.path  FROM users a INNER JOIN systems b ON a.system_id=b.id  order by a.id DESC LIMIT 20";
            using (MySqlCommand cmd = new MySqlCommand(query, conn))
            {
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                var dt = new System.Data.DataTable();
                da.Fill(dt);
                bindingSource1.DataSource = dt.Rows.Cast<DataRow>().Select(p => new aclass() { id = (p["id1"].ToString()),  Photo=File.Exists(p["photo enter code here"].ToString())? Image.FromFile(p["photo enter code here"].ToString()):Image.FromFile(avaterPath) }).ToList();
                conn.Close();

            }

最新更新