你好,我有一个问题,我使用绑定源将数据获取到数据网格视图,我的代码是下面的;
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();
}