[英]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.