我有一个看似简单的问题,我已经动态创建了一个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
答案 0 :(得分:6)
您可以将Bitmap
或Byte[]
用作DataType
。
DataGridView
与DataColumn
关联而不是DataGridViewTextColumn
,则 DataGridViewImageColumn
会显示类型名称。添加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;
答案 1 :(得分:4)
这是适用于我的代码。
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;