C# Dev GridView表格的CustomUnboundColumnData事件异步加载图片类AsynDownImage
C# Dev GridView表格的CustomUnboundColumnData事件异步加载图片类AsynDownImage
C# Code:
/// <summary>
/// GridView异步加载url地址的图片,通知CustomColumnDataEventArgs参数
/// </summary>
public class AsynDownImage
{
private string _URL { get; set; }
private Bitmap _Image { get; set; }
private bool _IsReady = false;
private object _Locker = new object();
private List<DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs> _listens;
private bool _UseLocalImage = true;//使用本地缓存图片
public AsynDownImage(string url)
{
_UseLocalImage = true;
_URL = url;
_listens = new List<DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs>();
this.StartDown();
}
/// <summary>
/// 开始加载图片
/// </summary>
void StartDown()
{
Task.Run(() =>
{
//判断本地缓存文件
if (_UseLocalImage && ImageFileCache.Instance.Exists(ImageBuckleName.small_images, this._URL))
{
this._Image = ImageFileCache.Instance.GetImage(ImageBuckleName.small_images, this._URL);
lock (_Locker)
{
_IsReady = true;
}
RunNotify();
return;
}
//判断图片路径是否为网络路径
if (IsUrl(this._URL))
{
try
{
//读取文件
using (WebClient wc = new WebClient())
{
Stream tream = wc.OpenRead(this._URL);
this._Image = new Bitmap(tream);
this._Image = new Bitmap(this._Image, new Size(60, 60));//缩放图片
//缓存图片
if (_UseLocalImage)
ImageFileCache.Instance.AddImage(this._URL, this._Image, ImageBuckleName.small_images);
}
}
catch (Exception ex)
{
this._Image = null;
}
lock (_Locker)
{
_IsReady = true;
}
RunNotify();
return;
}
});
}
public void AddListener(DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs obj)
{
lock (_Locker)
{
_listens.Add(obj);
if (this._IsReady)
{
obj.Value = this._Image;
}
}
}
void RunNotify()
{
lock (_Locker)
{
foreach (var o in _listens)
{
o.Value = this._Image;
}
}
}
/// <summary>
/// 识别urlStr是否是网络路径
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static bool IsUrl(string url)
{
if (Regex.IsMatch(url, @"((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\&%_\./-~-]*)?"))
{
return true;
}
else
{
return false;
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// GridView异步加载url地址的图片,通知CustomColumnDataEventArgs参数
/// </summary>
public class AsynDownImage
{
private string _URL { get; set; }
private Bitmap _Image { get; set; }
private bool _IsReady = false;
private object _Locker = new object();
private List<DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs> _listens;
private bool _UseLocalImage = true;//使用本地缓存图片
public AsynDownImage(string url)
{
_UseLocalImage = true;
_URL = url;
_listens = new List<DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs>();
this.StartDown();
}
/// <summary>
/// 开始加载图片
/// </summary>
void StartDown()
{
Task.Run(() =>
{
//判断本地缓存文件
if (_UseLocalImage && ImageFileCache.Instance.Exists(ImageBuckleName.small_images, this._URL))
{
this._Image = ImageFileCache.Instance.GetImage(ImageBuckleName.small_images, this._URL);
lock (_Locker)
{
_IsReady = true;
}
RunNotify();
return;
}
//判断图片路径是否为网络路径
if (IsUrl(this._URL))
{
try
{
//读取文件
using (WebClient wc = new WebClient())
{
Stream tream = wc.OpenRead(this._URL);
this._Image = new Bitmap(tream);
this._Image = new Bitmap(this._Image, new Size(60, 60));//缩放图片
//缓存图片
if (_UseLocalImage)
ImageFileCache.Instance.AddImage(this._URL, this._Image, ImageBuckleName.small_images);
}
}
catch (Exception ex)
{
this._Image = null;
}
lock (_Locker)
{
_IsReady = true;
}
RunNotify();
return;
}
});
}
public void AddListener(DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs obj)
{
lock (_Locker)
{
_listens.Add(obj);
if (this._IsReady)
{
obj.Value = this._Image;
}
}
}
void RunNotify()
{
lock (_Locker)
{
foreach (var o in _listens)
{
o.Value = this._Image;
}
}
}
/// <summary>
/// 识别urlStr是否是网络路径
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static bool IsUrl(string url)
{
if (Regex.IsMatch(url, @"((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\&%_\./-~-]*)?"))
{
return true;
}
else
{
return false;
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
ImageFileCache 类:
C# 本地图片缓存器ImageFileCache (www.csframework.com)

参考文档:
DevExpress GridView表格CustomUnboundColumnData事件异步加载图片
DevExpress GridView在只读状态下如何隐藏表格的按钮EditorShowMode|ShowButtonMode
DevExpress GridView表格记录位置调整,实现DataRow记录排序
快速增加表格栏位到DevExpres.GridControl.GridView
踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架
DevExpress GridView设置焦点行颜色
修改单元格关联更新其它列的值,Dev GridView组件OnCellValueChanged事件实现
C# Dev GridView表格使用RepositoryItemPictureEdit显示图标或图片
DevExpress GridView 表格内嵌ButtonEdit按钮列图片按钮及Click事件
DevExpress GridView获取主从表,主子表,子级二层表的当前记录(Master/Detail)
DevExpress GridView单元格CellValueChanged事件详解
DevExpress GridView设置单元格网格线颜色|C/S框架网
Dev GridView 内置Lookup组件同时操作编号和名称
解决:DevExpress.GridControl.GridView表格导出乱码
C# DevExpress高级篇 | GridLookUpEdit组件使用|C/S开发框架
C# DevExpress教学 GridLookUpEdit组件表格下拉组件使用|C/S开发框架
DevExpress GridView表格CustomUnboundColumnData事件异步加载图片
DevExpress GridView在只读状态下如何隐藏表格的按钮EditorShowMode|ShowButtonMode
DevExpress GridView表格记录位置调整,实现DataRow记录排序
快速增加表格栏位到DevExpres.GridControl.GridView
踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架
DevExpress GridView设置焦点行颜色
修改单元格关联更新其它列的值,Dev GridView组件OnCellValueChanged事件实现
C# Dev GridView表格使用RepositoryItemPictureEdit显示图标或图片
DevExpress GridView 表格内嵌ButtonEdit按钮列图片按钮及Click事件
DevExpress GridView获取主从表,主子表,子级二层表的当前记录(Master/Detail)
DevExpress GridView单元格CellValueChanged事件详解
DevExpress GridView设置单元格网格线颜色|C/S框架网
Dev GridView 内置Lookup组件同时操作编号和名称
解决:DevExpress.GridControl.GridView表格导出乱码
C# DevExpress高级篇 | GridLookUpEdit组件使用|C/S开发框架
C# DevExpress教学 GridLookUpEdit组件表格下拉组件使用|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
