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