zoukankan      html  css  js  c++  java
  • GridControl 列中显示图片 z

    如何在 DevExpress.XtraGrid.GridControl 显示图片列。 方法很多,我把它们逐一写在附言中,方便大家分情况合理使用。

    第 1 条附言  ·  6 月前

    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;
    }


    然后设置 gridcontrol1.DataSource=dt; 完成。
    第 2 条附言  ·  6 月前

    上一篇介绍的是直接使用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;
     
    }


    第 3 条附言  ·  6 月前

    还有一种方法,使用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];
        }
    }
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/zeroone/p/3534782.html
Copyright © 2011-2022 走看看