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

转载于:https://www.cnblogs.com/zeroone/p/3534782.html

GridControl是DevExpress公司的一个控件,可以在WinForms应用程序中创建自定义网格视图。它可以轻松地绑定各种数据源,包括数组,以显示和编辑它们的数据。 如果您要将数组数据显示GridControl中,可以使用以下步骤: 1. 创建一个DataTable对象,并添加需要显示的列。 2. 使用数组中的数据填充DataTable对象。 3. 将DataTable对象绑定到GridControl的DataSource属性。 4. 根据需要设置其他GridControl属性,例如列标题、单元格格式等。 以下是一个简单的示例代码,演示如何将数组数据显示GridControl中: ```csharp // 创建一个DataTable对象 DataTable table = new DataTable(); // 添加需要显示的列 table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); table.Columns.Add("Age", typeof(int)); // 使用数组中的数据填充DataTable对象 int[,] data = new int[,] { { 1, "Alice", 20 }, { 2, "Bob", 25 }, { 3, "Charlie", 30 } }; for (int i = 0; i < data.GetLength(0); i++) { DataRow row = table.NewRow(); row["ID"] = data[i, 0]; row["Name"] = data[i, 1]; row["Age"] = data[i, 2]; table.Rows.Add(row); } // 将DataTable对象绑定到GridControl的DataSource属性 gridControl1.DataSource = table; // 设置列标题 gridView1.Columns[0].Caption = "ID"; gridView1.Columns[1].Caption = "Name"; gridView1.Columns[2].Caption = "Age"; // 设置单元格格式 gridView1.Columns[2].DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; gridView1.Columns[2].DisplayFormat.FormatString = "d"; ``` 这样,您就可以将数组数据显示GridControl中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值