编程语言
首页 > 编程语言> > c# – 用于在DataTable的DataColumn中保存图像的DataType

c# – 用于在DataTable的DataColumn中保存图像的DataType

作者:互联网

我有一个看似简单的问题,我已经动态创建了一个DataTable,并且我很好地添加了行.但是我有一个列,它将有一个标志,这是一个图像.我已经将两个标志(.png图像)导入到项目资源中.但是我无法将列的DataType设置为System.Type.Bitmap,因为DataColumn不支持,因为这里可以看到.我见过一个解决方案,说我将DataType设置如下

dataColumn = new DataColumn("Flag");
dataColumn.DataType = System.Type.GetType("System.Byte[]"); //Replacing System.Byte[] with System.Type.Bitmap throws Type Exception
dataTable.Columns.Add(dataColumn);

然而,抛出一个Exception声明编译器期望Byte []但得到了Bitmap.

以下是我向DataTable添加行的方法

row["Part Number"] = part;
row["Module Name"] = populator.LookUpAValue(moduleSql);
row["Flag"] = Properties.Resources.Yellow_Flag;
row["Location"] = populator.LookUpAValue(nameSql);
dataTable.Rows.Add(row);

这是我的问题,我将DataType保存为图像列,因此当我显示到DataGridView时,我看到显示的图像.如果不在DataGridView上设置DataType而不是显示图像,我会得到文本
System.Drawing.Bitmap

解决方法:

您可以使用Bitmap或Byte []作为DataType.

如果已将DataColumn与DataGridViewTextColumn而不是DataGridViewImageColumn相关联,DataGridView将显示类型名称.添加DataGridViewImageColumn并将DataTable中的image列关联到此创建的列.

如果要将DataType设置为Byte [],则在存储图像时,必须将图像转换为Byte [],同时从DataTable读取从Byte []到图像的隐藏.

dataColumn.DataType = System.Type.GetType("System.Byte[]");

图像到Byte []转换

Image image = dataGridView1.Rows[rowIndex].Cells[columnIndex].Value as Image;
if(image != null)
{
    MemoryStream ms = new MemoryStream();
    image.Save(ms, System.Drawing.Imaging.ImageFormat.);
    byte[] imagedata = ms.ToArray();
}

字节[]到图像转换

MemoryStream ms = new MemoryStream(imagedata);
Image img = Image.FromStream(ms);
dataGridView1.Rows[rowIndex].Cells[columnIndex].Value = img;

标签:c,datatable,datagridview,datagridviewcolumn,datacolumn
来源: https://codeday.me/bug/20190717/1489918.html