Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于在DataTable的DataColumn中保存图像的数据类型_C#_Datagridview_Datatable_Datagridviewcolumn_Datacolumn - Fatal编程技术网

C# 用于在DataTable的DataColumn中保存图像的数据类型

C# 用于在DataTable的DataColumn中保存图像的数据类型,c#,datagridview,datatable,datagridviewcolumn,datacolumn,C#,Datagridview,Datatable,Datagridviewcolumn,Datacolumn,我有一个看似简单的问题,我动态地创建了一个DataTable,并向其中添加了行。然而,我有一个列,其中将有一个标志,这是一个图像。我已经将这两个标志(.png图像)导入到项目资源中。但是,我无法将列的数据类型设置为System.Type.Bitmap,因为DataColumn不支持此功能,如图所示。我看到了一个解决方案,它说我将数据类型设置如下 dataColumn = new DataColumn("Flag"); dataColumn.DataType = System.Type.GetTy

我有一个看似简单的问题,我动态地创建了一个DataTable,并向其中添加了行。然而,我有一个列,其中将有一个标志,这是一个图像。我已经将这两个标志(.png图像)导入到项目资源中。但是,我无法将列的数据类型设置为System.Type.Bitmap,因为DataColumn不支持此功能,如图所示。我看到了一个解决方案,它说我将数据类型设置如下

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);
但是,这会引发一个异常,说明编译器需要字节[],但得到位图

下面是我如何向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

您可以将
位图
字节[]
用作
数据类型

DataGridView
如果将
DataColumn
DataGridViewTextColumn
而不是
DataGridViewImageColumn
关联,则显示类型名称。添加一个
DataGridViewImageColumn
,并将
DataTable
中的图像列与此创建的列相关联

如果要将
数据类型设置为
字节[]
,则在存储图像时,必须将图像转换为
字节[]
,并在从
数据表读取时将图像从
字节[]
转换为图像

dataColumn.DataType = System.Type.GetType("System.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;
字节[]
到图像的转换

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;

这是对我有用的代码

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;