Форма содержит UltraWinTree и два DataSeta.
Цель: сохранить содержимое этих объектов - все это в один файл - при закрытии формы и соответственно восстановление данных при загрузке формы.
Решение: (использую MemoryStream)
- Код: Выделить всё
Public Sub Save(ByVal FilePatch As String)
Dim File as IO.File
Dim Serializer As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim StorageHashTable As New Hashtable
Dim TreeMemoStream As New IO.MemoryStream
Dim VariablesDataSetMemoStream As New IO.MemoryStream
Dim HashDataSetMemoStream As New IO.MemoryStream
Me.tree.SaveAsBinary(TreeMemoStream)
Me.DataSet.WriteXml(VariablesDataSetMemoStream, XmlWriteMode.WriteSchema)
Me.HashDataSet.WriteXml(HashDataSetMemoStream, XmlWriteMode.WriteSchema)
StorageHashTable.Add("Tree", TreeMemoStream)
StorageHashTable.Add("VariablesDataSet", VariablesDataSetMemoStream)
StorageHashTable.Add("HashDataSet", HashDataSetMemoStream)
Serializer.Serialize(File.Create(FilePatch), StorageHashTable)
End Sub
Public Sub Load(ByVal FilePatch As String)
Dim file As IO.File
Dim Serializer As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim StorageHashTable As New Hashtable
Dim TreeMemoStream As New IO.MemoryStream
Dim VariablesDataSetMemoStream As New IO.MemoryStream
Dim HashDataSetMemoStream As New IO.MemoryStream
StorageHashTable = Serializer.Deserialize(file.Open(FilePatch), IO.FileMode.Open))
TreeMemoStream = (StorageHashTable.Item("Tree"))
VariablesDataSetMemoStream = (StorageHashTable.Item("VariablesDataSet"))
HashDataSetMemoStream = (StorageHashTable.Item("HashDataSet"))
Me.tree.LoadFromBinary(TreeMemoStream)
Me.DataSet.ReadXml(VariablesDataSetMemoStream, XmlReadMode.ReadSchema)
Me.HashDataSet.ReadXml(HashDataSetMemoStream, XmlReadMode.ReadSchema)
End Sub
После выполнения процедуры сохранения появляется вполне адекватный по своему содержимому файл.
При исполнении процедуры загрузки данных возникает исключение: "ApplicationExeption was Unhandled" в строке
- Код: Выделить всё
Me.tree.LoadFromBinary(TreeMemoStream)
То же происходит на стадии:
- Код: Выделить всё
Me.DataSet.ReadXml(VariablesDataSetMemoStream, XmlReadMode.ReadSchema)
Me.HashDataSet.ReadXml(HashDataSetMemoStream, XmlReadMode.ReadSchema)
Не могу понять чем не приглянулся UltraTree и DataSet-ам этот поток???