2015-02-08 2 views
3

У меня есть, казалось бы, простая проблема, я динамически создал DataTable, и я просто добавляю строки в нее. Однако у меня есть столбец, у которого будет флаг, являющийся изображением. Я уже импортировал два флага (.png изображения) в ресурсы проектов. Однако я не могу установить DataType для столбца как System.Type.Bitmap, поскольку DataColumn не поддерживает это, как можно видеть здесь ЗДЕСЬ. Я видел решение, сказал я поставил DATATYPE нижеDataType для сохранения изображений в DataColumn DataTable

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, я вижу изображения, отображаемые. Без установки DATATYPE на DataGridView вместо того, чтобы проецировать изображения, я получаю текст System.Drawing.Bitmap

ответ

2

Это код, который работал для меня.

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

Вы можете использовать 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; 
Смежные вопросы