如何在GridControl中显示图片列?控件DevExpress.XtraGrid.GridControl中显示图片列。

GridControl一列的ColumnEdit属性中选择PictureEdit,一个RepositoryItemPictureEdit添加完成。列的FieldName设置为Image列名,如img。

GridControl绑定的数据,不管是DataTable、List或者其他源,添加一个列,列名为img。 以DataTable为例:

Image xx=Image.FromFile("xxx"),yy=Image.FromFile("yyy");
dt.Columns.Add("img");
foreach(DataRow dr in dt.Rows)
{
    if(dr["imgflag"].ToString()=="1")
        dr["img"]=xx;
    else dr["img"]=yy;
}

使用这种方法时遇到问题就是图片一直无法显示在列表中,并且检查GridControl所有属性后仍然未找到解决方案:

最后解决方案如下:

Image xx=Image.FromFile("xxx"),yy=Image.FromFile("yyy");
dt.Columns.Add("img", Type.GetType("System.Byte[]"));
foreach(DataRow dr in dt.Rows)
{
    if(dr["imgflag"].ToString()=="1")
        dr["img"]=ImageToBytes(xx);
    else dr["img"]=ImageToBytes(yy);
}
public static byte[] ImageToBytes(Image image)
        {
            ImageFormat format = image.RawFormat;
            using (MemoryStream ms = new MemoryStream())
            {
                if (format.Equals(ImageFormat.Jpeg))
                {
                    image.Save(ms, ImageFormat.Jpeg);
                }
                else if (format.Equals(ImageFormat.Png))
                {
                    image.Save(ms, ImageFormat.Png);
                }
                else if (format.Equals(ImageFormat.Bmp))
                {
                    image.Save(ms, ImageFormat.Bmp);
                }
                else if (format.Equals(ImageFormat.Gif))
                {
                    image.Save(ms, ImageFormat.Gif);
                }
                else if (format.Equals(ImageFormat.Icon))
                {
                    image.Save(ms, ImageFormat.Icon);
                }
                byte[] buffer = new byte[ms.Length];
                //Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin
                ms.Seek(0, SeekOrigin.Begin);
                ms.Read(buffer, 0, buffer.Length);
                return buffer;
            }
        }

在DataTable列中添加图片列的时候需要制定数据类型。

然后设置 gridcontrol1.DataSource=dt; 完成。

上一篇介绍的是直接使用Image类型,也可以使用byte[]。

如果数据库中直接存的二进制,没什么好说的,直接DataSource=dt绑定完成即可。

下面是一个image路径的例子。

private void showData(List list) {

    DataTable dt = new DataTable("OneEmployee");

    dt.Columns.Add("Caption",System.Type.GetType("System.String"));

    dt.Columns.Add("Department",System.Type.GetType("System.String"));

    dt.Columns.Add("PhotoName",System.Type.GetType("System.Byte[]"));

    for (int i = 0; i < list.Count; i++) {

        DataRow dr = dt.NewRow();

        dr["Caption"] = list[i].Name;

        dr["Department"] =list[i].Department;

        string imagePath = @"D:/C#/photos/" + list[i].PhotoPath;

        dr["PhotoName"] = getImageByte(imagePath);

        dt.Rows.Add(dr);

    }

    gridControl1.DataSource = dt;

}

//返回图片的字节流byte[]

private byte[] getImageByte(string imagePath) {

    FileStream files = new FileStream(imagePath,FileMode.Open);

    byte[] imgByte = new byte [files.Length ];

    files.Read(imgByte,0, imgByte.Length);

    files.Close();

    return imgByte;

}

还有一种方法,使用CustomUnboundColumnData事件

1. 创建了一个非绑定列并设置其相应的属性,属性设置如下:

FieldName设为Image (该字段名必须是唯一的) UnboundType设为 UnboundColumnType.Object

ColumnEdit设为RepositoryItemPictureEdit类的实例(该操作PictureEdit 为该列的内置编辑器)

2. 处理View的CustomUnboundColumnData事件,用于为非绑定列填充数据。

在该事件中需加载图片,将其存放在一个hashtable中,然后再将其提供给对应

的单元格。

关键代码:

//获取文件路径
string GetFileName(string color) {
    if(color == null ||color == string.Empty)
        return string.Empty;
    return color + ".jpg";
}
//处理CustomUnboundColumnData事件,为非绑定列填充数据
private void gridView1_CustomUnboundColumnData(object sender,
DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{
    if(e.Column.FieldName == "Image" && e.IsGetData) {
    GridView view = sender as GridView;
    string colorName = (string)((DataRowView)e.Row)["Color"];
    string fileName = GetFileName(colorName).ToLower();
    if(!Images.ContainsKey(fileName))
    {
        Image img = null;
        try {
            string filePath = DevExpress.Utils.FilesHelper.FindingFileName(Application.StartupPath, ImageDir+ fileName, false);
            img = Image.FromFile(filePath);
        } catch { }
            Images.Add(fileName, img);
        }
        e.Value = Images[fileName];
    }
}
时间: 2024-08-03 21:49:15

如何在GridControl中显示图片列?控件DevExpress.XtraGrid.GridControl中显示图片列。的相关文章

Android高级图片滚动控件,编写3D版的图片轮播器

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482089 大家好,好久不见了,最近由于工作特别繁忙,已经有一个多月的时间没写博客了,我也是深感惭愧.那么今天的这篇既然是阔别了一个多月的文章,当然要带来更加给力点的内容了,那么话不多说,赶快进入到今天的正题吧. 说 到图片轮播器,很多的Android应用中都会带有这个功能,比如说网易新闻.淘宝等.最新我们公司的一款应用也加入了这个功能,并且在图片轮播的基础上 还增加了三维立体

xml中定义个TextView控件及java代码中调用方法。

<TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/hello_world"         android:id="@+id/myTextView" /> TextView myTextView = (Text

C# 控件 DevExpress的DateEdit设置显示日期和时间

this.dateEdit1.Properties.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm"; this.dateEdit1.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; this.dateEdit1.Properties.EditFormat.FormatString = "yyyy-MM-dd HH:mm"

[Android] 拍照、截图、保存并显示在ImageView控件中

最近在做Android的项目,其中部分涉及到图像处理的内容.这里先讲述如何调用Camera应用程序进行拍照,并截图和保存显示在ImageView控件中以及遇到的困难和解决方法. PS:作者购买了本<Android第一行代码 著:郭霖>,参照里面的内容完成(推荐该书,前面的布局及应用非常不错).网上这类资料非常多,作者仅仅分享给初学者同时在线记录些内容,希望对大家有所帮助. 首先,设置activity_main.xml为LinearLayout布局且 android:orientation=&q

Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

 Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halcon 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] HWindowControl控件初步使用 最近在学习新的视觉处理工具–Halcon软件包,本人学习的主要是HDevelop.Halcon与C#混编以及Halcon与C++混编.这里再多缀一句:11版本后C++编程,包含的是h

C#中“类似GridView等控件”的前台显示与后台数据变化之间的关系

最近用dev的treelist,gridcontrol等控件,这些控件显示数据都需要进行DataTable等数据源的绑定,而经理又要求可以随时更改其中的内容,刚开始总是不断的刷新控件.更新控件的数据源(我这里就需要从数据库重新取数据)感觉特别麻烦. 这两天在更改代码时发现了一些我觉的很快捷的地方,在这里提一下: ※这里我的数据源都是以DataTable来做的 1.当从数据库取出数据并赋予datatable之后,接下来只要不再去连接数据库,这时对datatable的所有操作都不会影响数据库内的数据

我写的一个 Qt 显示图片的控件

Qt 中没有专门显示图片的控件,通常我们会使用QLabel来显示图片.但是QLabel 显示图片的能力还是有点弱.比如不支持图像的缩放一类的功能,使用起来不是很方便.因此我就自己写了个简单的类. 我这个类支持三种图像显示模式,我分别称之为:FIXED_SIZE, CENTRED,AUTO_ZOOM, AUTO_SIZE. FIXED_SIZE 模式下,显示的图像大小等于图像尺寸乘以缩放因子,如果控件的尺寸小于这个大小则多出的部分被裁切掉. FIX_SIZE_CENTRED模式与FIXED_SIZ

Xcode中给控件添加颜色时自动显示出颜色

在iOS开发中,给一些控件设置颜色的时候,设置完不能立马看到颜色.必须要运行程序之后才能看到设置的颜色,如果颜色有偏差再回代码改参数,然后再运行看颜色很是麻烦.令人高兴得是Xcode有很多功能强大插件,使用起来非常方便.ColorSense-for-Xcode-master 就是一个非常好用的设置完颜色就能立即显示颜色的插件.效果图如下 插件安装方法: 1.到github上下载插件https://github.com/omz/ColorSense-for-Xcode 2.下载完插件之后用Xcod

mysql中以blob形式存储的图片文件 通过ajax方式传输 在js中设置成img控件的src

第一步,读取blob数据, 第二步,将blob数据转换成byte数组 第三步,将byte数据进行base64加密转换成字符串并回传 第四步,接收字符串 第五步,将img控件的src设置成"data:image/jpeg;base64,"+接收的字符串; 相关代码: java: public String getAccountImg(String alias) { String sql = "SELECT imgrawdata FROM wx_account WHERE ali