Сначала спасибо, что прочитали мою проблему.
Фон
Я работаю над DataGridView, который использует существующий файл XML в качестве источника данных:
public DataSet TableDatabase = new DataSet();
TableDatabase.ReadXml("xml_file.xml");
(DataGridView)DbTable.DataSource = TableDatabase.Tables[0];
Базовый файл XMLобщая база данных с id, int, text.
Что я хочу сделать
Что я в основном хочу сделать, это добавить новый столбец с typeof Bitmap (источник из буфера обмена) и сериализуйте его как Base64 "string".
Если я использую первую строку "typeof (Bitmap)", данные изображения будут показаны как image, но не знаю, как его сериализовать ...
// DataColumn col = TableDatabase.Tables[0].Columns.Add("columnname", typeof(Bitmap));
DataColumn col = TableDatabase.Tables[0].Columns.Add("columnname", typeof(MyImage));
Я создал класс под названием «MyImage» (на основе Сериализация растрового изображения в C # /. NET в XML ):
[Serializable]
public class MyImage : IXmlSerializable
{
public Bitmap Image { get; set; }
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
reader.ReadStartElement();
MemoryStream ms = null;
byte[] buffer = new byte[256];
int bytesRead;
while ((bytesRead = reader.ReadContentAsBase64(buffer, 0, buffer.Length)) > 0)
{
if (ms == null)
{
ms = new MemoryStream(bytesRead);
}
ms.Write(buffer, 0, bytesRead);
}
if (ms != null)
{
Image = (Bitmap)System.Drawing.Image.FromStream(ms,true,true);
}
reader.ReadEndElement();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
using (MemoryStream ms = new MemoryStream())
{
Image.Save(ms, ImageFormat.Bmp);
byte[] bitmapData = ms.ToArray();
writer.WriteBase64(bitmapData, 0, bitmapData.Length);
}
}
}
Работает действительно хорошо, яможно загрузить и записать изображения в формате xml:
<columnname>...base64 data...</columnname>
Проблема
Поле данных в DataGridView не будет отображаться как изображение: (*
Это просто показывает строку: " Пространство имен.MyImage". Так как я могу сказать DataCell показать изображение?