C# 在DataListView中将绑定字节数组显示为图像

C# 在DataListView中将绑定字节数组显示为图像,c#,winforms,objectlistview,C#,Winforms,Objectlistview,我使用的是ObjectListView控件集,特别是DataListView。这是我的密码 控件的数据源: dataListView1.DataSource = this.ViewModel.DataSet; 其中,数据集由以下内容填充: this.ViewModel.DataSet = HSGlobals.ctx.Entities<Product>().All() .Where(p => productIdList.Conta

我使用的是
ObjectListView
控件集,特别是
DataListView
。这是我的密码

控件的数据源:

dataListView1.DataSource = this.ViewModel.DataSet;
其中,
数据集
由以下内容填充:

this.ViewModel.DataSet = HSGlobals.ctx.Entities<Product>().All()
                        .Where(p => productIdList.Contains(p.Id)).Select(p => new
                        {
                            Nazwa = p.Name,
                            Kod = p.Code,
                            Dostępność = p.AvaibleQuantity,
                            Typ = p.ProductType.Name,
                            Miara = p.MeasureUnit.Name,
                            Grafika = p.ProductImage.Image
                        }).ToList();
this.ViewModel.DataSet=HSGlobals.ctx.Entities().All()
.Where(p=>productIdList.Contains(p.Id))。选择(p=>new
{
Nazwa=p.Name,
Kod=p.代码,
Dostępność=p.可用数量,
Typ=p.ProductType.Name,
Miara=p.MeasureUnit.Name,
Grafika=p.ProductImage.Image
}).ToList();
Grafika
是一个字节数组-从数据库获取的图像

当显示
dataListView
时,
Grafika
列仅显示此字段的类型-
System.byte[]

我要做什么才能只显示一个图像?


我已经尝试了
ImageGetter
Renderer
属性,但没有成功。

假设您的字节数组是有效的图像, 使用memorystream使用字节数组,然后构造位图:

var ms = new MemoryStream(yourImageByteArray);
var image = new Bitmap(ms)
然后将图像绑定到数据列表

编辑 要添加到ObjectViewList图像列表,需要执行以下操作:

this.listView.LargeImageList.Images.Add(yourImages);

如果将
BrightIdeasSoftware.ImageRenderer
的实例附加到列的渲染器,则初始方法应该可以工作

对于ImageRenderer,可以从以下来源获取图像:

  • 字节数组(通常当要显示的图像作为值存储在数据库中时)
  • 一个int,作为图像列表的索引处理
  • 一个字符串,首先将其视为文件名,否则将其作为图像列表的索引
  • INT或字符串的ICollection,将作为连续图像绘制
假设您的字节流包含创建位图的有效数据,则应该这样做


编辑:还要确保OLV的
OwnerDraw
属性设置为
true
,IIRC这是绘制自定义图像的要求。

您需要确保ImageUrl绑定正确。请参考此url:What ImageUrl?看我的标签,这是WinForms。我正在使用这个控件-你能更清楚地描述它吗?我不太清楚这个控制。我正在将类对象列表绑定到我的dataListView,其中一个类字段是一个图像。这需要分开做吗?其他绑定中的图像?还是怎么了?我错过了这个OwnerDraw酒店。非常感谢!:)