簡體   English   中英

具有圖像路徑的C#datagridview綁定源(如果不存在)

[英]C# datagridview binding source with image path if not existing

您好我有一個問題,即時通訊使用bindingSource將數據獲取到datagridview,我的代碼在下面;

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

您需要先檢查文件是否存在,然后再從路徑或頭像路徑加載文件。 您可以使用以下幫助器功能:

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:\ProjectFolder\Images\NoImage.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:\Images\NoImage.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();


            }

謝謝大家,這是我的解決方案;

 string avaterPath=@"D:\Images\NoImage.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();


            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM