• 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];
        }
    }
  • 相关阅读:
    简单工厂
    Asp.Net Catch的应用
    ADO和ADO.NET的区别
    PLSql语句学习(三)
    三层结构的B/S系统(收藏)
    MVC 模式
    利用.net反射动态调用指定程序集的中的方法
    .NET反射的简单示例
    ToString格式化
    HTML:关于位置的几个概念
  • 原文地址:https://www.cnblogs.com/zeroone/p/3534782.html
Copyright © 2020-2023  润新知