DataTable的DataColumn中保存图片的DataType
DataType for Saving Images in DataColumn of DataTable
我有一个看似简单的问题,我动态创建了一个 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);
然而,这引发了一个异常,说明编译器需要 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 上设置 DataType 而不是显示图像,我会得到文本
System.Drawing.Bitmap
您可以使用 Bitmap
或 Byte[]
作为 DataType
。
如果您将 DataColumn
与 DataGridViewTextColumn
而不是 DataGridViewImageColumn
相关联,DataGridView
将显示类型名称。添加 DataGridViewImageColumn
并将 DataTable
中的图像列关联到此创建的列。
如果要将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;
这是对我有用的代码。
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;
我有一个看似简单的问题,我动态创建了一个 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);
然而,这引发了一个异常,说明编译器需要 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 上设置 DataType 而不是显示图像,我会得到文本
System.Drawing.Bitmap
您可以使用 Bitmap
或 Byte[]
作为 DataType
。
DataColumn
与 DataGridViewTextColumn
而不是 DataGridViewImageColumn
相关联,DataGridView
将显示类型名称。添加 DataGridViewImageColumn
并将 DataTable
中的图像列关联到此创建的列。
如果要将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;
这是对我有用的代码。
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;