Кнопка отображения двоичного содержимого в datagridviewC#

Место общения программистов C#
Ответить
Anonymous
 Кнопка отображения двоичного содержимого в datagridview

Сообщение Anonymous »

Я создаю программу базы данных XML для Windows Desktop ради развлечения, но у меня возникли проблемы с распознаванием сетки данных двоичной строки. Ему необходимо определить, является ли строка двоичными данными, чтобы кнопка могла появиться в ячейке, где находятся двоичные данные.
РЕДАКТИРОВАТЬ: Итак, я решил, что это самый простой способ добраться до желаемый результат — заставить пользователя выбрать тип данных, который он хочет записать. А затем позже проверьте этот тип данных в каждом столбце, а затем поместите кнопку, если этот тип данных существует в столбце.
У меня есть класс «TableFactory», который создает таблицу, которая будет сериализуется и сохраняется в XML. В этот класс я добавил перечисление ColumnDataTypes и раздел для обработки типов, которые я хочу разрешить, сейчас только 3: Integer, String и File(byte[]). Проблема с этим новым подходом заключается в том, что для правильного хранения массива байтов мне нужно преобразовать его в Base64String. Однако при этом тип данных меняется на строку, а не на байт, поэтому кнопки нет.
Класс фабрики таблиц:

Код: Выделить всё

        using System.Data;
using System.Xml;
using System.IO;
using System.Xml.Serialization;
using XML_Database.usrctrls;

namespace XML_Database.data
{
public class TableFactory
{
//string _tableName;
DataTable _dt;

//public string TableName { get { return _tableName; } set { _tableName = value; } }

public TableFactory(string tableName)
{
if (this._dt == null)
{
this._dt = new DataTable(tableName);
}
}

public DataTable Table
{
get { return this._dt; }
set { this._dt = value; }
}

public void NewColumn(string ColumnName, ColumnTypes colType)
{
if (!this._dt.Columns.Contains(ColumnName))
{
switch (colType)
{
case ColumnTypes.String:
this._dt.Columns.Add(ColumnName, typeof(String));
break;
case ColumnTypes.Integer:
this._dt.Columns.Add(ColumnName, typeof(Int32));
break;
case ColumnTypes.Binary:
this._dt.Columns.Add(ColumnName, typeof(Byte[]));
break;
}
}
}

public void DeleteColumn(string ColumnName)
{
if (_dt.Columns.Contains(ColumnName))
{
_dt.Columns.Remove(ColumnName);
}
}

public void SaveTable(string Path)
{
data.encryptFiles._SALT = data.dboptions.Salt();
data.encryptStrings._SALT = data.dboptions.Salt();
string tablePath = Path + "\\" + _dt.TableName + ".xml";
DataSet ds = new DataSet();
XmlDocument xDoc = new XmlDocument();
ds.Tables.Clear();
ds.Tables.Add(_dt.Copy());

XmlElement xE = (XmlElement)Serialize(ds);
string strXml = xE.OuterXml.ToString();

xDoc.LoadXml(strXml);
xDoc.Save(tablePath);
if (data.dboptions.DBEncryptionOptions())
{
File.Delete(Path + "\\" + _dt.TableName + "_enc.xml");
data.encryptFiles.EncryptFile(tablePath, tablePath.Replace(".xml", "_enc.xml"), data.encryptStrings.Decrypt(data.dboptions.Pwd(), data.dboptions.Salt()));
}
}

public void LoadTable(string Path)
{
string tablePath = Path + "\\"  + _dt.TableName + ".xml";
XmlDocument xDoc = new XmlDocument();
if (File.Exists(tablePath))
{
if (_dt.TableName.Contains("_enc"))
{
MemoryStream ms = new MemoryStream();
data.encryptFiles._SALT = data.dboptions.Salt();
data.encryptStrings._SALT = data.dboptions.Salt();
data.encryptFiles.DecryptToMemory(tablePath, out ms, data.encryptStrings.Decrypt(data.dboptions.Pwd(), data.dboptions.Salt()));
using (ms)
{
xDoc.Load(ms);
}
DataSet ds = (DataSet)Deserialize(xDoc.DocumentElement, typeof(DataSet));
_dt = ds.Tables[0];
}
else
{
xDoc.Load(tablePath);
DataSet ds = (DataSet)Deserialize(xDoc.DocumentElement, typeof(DataSet));
_dt = ds.Tables[0];
}
}
}

private object Deserialize(XmlElement xmlElement, System.Type type)
{
Object transformedObject = null;
try
{
Stream memStream = StringToStream(xmlElement.OuterXml);
XmlSerializer serializer = new XmlSerializer(type);
transformedObject = serializer.Deserialize(memStream);
}
catch (Exception)
{

}
return transformedObject;
}

private Stream StringToStream(string p)
{
MemoryStream memStream = null;
try
{
byte[] buffer = Encoding.UTF8.GetBytes(p);
memStream = new MemoryStream(buffer);
}
catch (Exception)
{

}
finally
{
memStream.Position = 0;
}
return memStream;
}

private XmlElement Serialize(object TransformObject)
{
XmlElement serializedElement = null;
try
{
MemoryStream memStream = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(TransformObject.GetType());
serializer.Serialize(memStream, TransformObject);
memStream.Position = 0;
XmlDocument xDoc = new XmlDocument();
xDoc.Load(memStream);
serializedElement = xDoc.DocumentElement;
}
catch (Exception)
{

}
return serializedElement;
}
}
}
Любая помощь приветствуется! :)


Подробнее здесь: https://stackoverflow.com/questions/143 ... tagridview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»