数据表中DataColumn用于保存图像的数据类型是什么?

3
我有一个看似简单的问题,我动态创建了一个 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);

然而,这会抛出一个异常,指明编译器期望的是 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);

这是我的问题,我应该将图像列保存为哪种数据类型,以便在显示到DataGridView时能够看到图像。如果没有在DataGridView上设置数据类型,而不是显示图像,我会得到文本System.Drawing.Bitmap
2个回答

7

这是对我有效的代码。

DataTable dt = new DataTable();
DataColumn dc = new DataColumn("Column1");
dc.DataType = System.Type.GetType("System.Byte[]");
dt.Columns.Add(dc);
DataRow row = dt.NewRow();
var imageConverter = new ImageConverter();
row["Column1"] = imageConverter.ConvertTo(Properties.Resources._1, System.Type.GetType("System.Byte[]")); 
dt.Rows.Add(row);
this.dataGridView1.DataSource = dt;

6
你可以使用BitmapByte[]作为DataType
如果你将DataColumnDataGridViewTextColumn相关联而不是DataGridViewImageColumn,则DataGridView会显示类型名称。添加一个DataGridViewImageColumn并将数据表中的图像列与此创建的列相关联。
如果您想将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();
}

Byte[] 转换为图像

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接