用于在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);

然而,这会引发一个异常,说明编译器需要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

这是为我工作的代码。

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;

您可以使用BitmapByte[]作为DataType

如果已将DataColumnDataGridViewTextColumn而不是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;

相关内容

  • 没有找到相关文章

最新更新