Hi
I'm trying to save and load a RadDock layout to a database field using a MemoryStream but the code fails on loading the layout with error 'System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.'
I have very similar code to save and load layouts for RadDock and it works. Also I can save and load dock layouts if I use xml files but I don't want to use them.
I'm using Progress OpenEdge andthese are code snippets for saving and loading the layout.
METHOD PRIVATE VOID SaveDockLayout( ):
DEF VAR l_MemoryStream AS System.IO.MemoryStream NO-UNDO.
DEF VAR l_UTF8Encoding AS System.Text.UTF8Encoding NO-UNDO.
DEF VAR lc_char AS LONGCHAR NO-UNDO.
ASSIGN
l_MemoryStream = NEW System.IO.MemoryStream()
l_UTF8Encoding = NEW System.Text.UTF8Encoding()
.
radDock1:SaveToXml(l_MemoryStream).
lc_char = l_UTF8Encoding:GetString(l_MemoryStream:ToArray()).
COPY-LOB FROM lc_char TO tt_stored_layout.layout.
l_MemoryStream:Close().
l_MemoryStream = ?.
DELETE OBJECT l_MemoryStream NO-ERROR.
DELETE OBJECT l_UTF8Encoding NO-ERROR.
END METHOD.
METHOD PRIVATE VOID LoadDockLayout( ):
DEF VAR l_MemoryStream AS System.IO.MemoryStream NO-UNDO.
DEF VAR l_UTF8Encoding AS System.Text.UTF8Encoding NO-UNDO.
DEF VAR lc_char AS LONGCHAR NO-UNDO.
COPY-LOB FROM tt_stored_layout.layout TO lc_char.
ASSIGN
l_UTF8Encoding = NEW System.Text.UTF8Encoding()
l_MemoryStream = NEW System.IO.MemoryStream(l_UTF8Encoding:GetBytes(lc_char), 0, l_UTF8Encoding:GetByteCount(lc_char))
.
radDock1:SuspendLayout().
radDock1:LoadFromXml(l_MemoryStream).
radDock1:ResumeLayout().
l_MemoryStream:Close().
l_MemoryStream = ?.
DELETE OBJECT l_MemoryStream NO-ERROR.
DELETE OBJECT l_UTF8Encoding NO-ERROR.
END METHOD.
Can you help or give me an example of using a method to save and load dock layouts withouth resorting to xml files?
Kind regards
Tung