Saving Nodes

I have looked at OrgCharter and other examples where the model is saved in xml format. I have an interesting issue, here. I have a model where each node is behaviorally tied to a knowledge base in our system. I am not interested in saving the links the way they are drawn etc because once we load the model from the database we draw the links based on our knowledge nodes behind the GoGeneralNode sub-class.
What I am interested in saving the positions of the nodes only so that when the model is reloaded the nodes appear at the locations where they were in the designer View before save.
I looked at the examples at am saving in the database the bounds for each node in our knowledge node. Before we add the GoGeneralNode specific to the knowledge node we set the bounds to the values that went into the database. It seems to just overlap the nodes on top of one another rather than put them at the co-ordinates defined by the bounds.
Do I need to set the view co-ordinates/bounds also or next node etc?? Can you please respond to this question.
I am providing the code -snippet. here --> When the node is moved in the view we get the following attributes -->
-------------While working on the view/Document -------------->
public class McKWorkFlowTaskNode : GoGeneralNode {

protected override void OnBoundsChanged(RectangleF old)
public void SerializeNodeLocation()
if( this.taskDefinition != null )
float locationX = this.Left;
this.TaskDefinition.LocationX = Convert.ToString(locationX);
float locationY = this.Top;
this.TaskDefinition.LocationY = Convert.ToString(locationY);
float locationH = this.Height;
this.TaskDefinition.LocationH = Convert.ToString(locationH);
float locationW = this.Width;
this.TaskDefinition.LocationW = Convert.ToString(locationW);

-------------------While reloading…--------------------
McKWorkFlowTaskNode taskNode = new McKWorkFlowTaskNode();
taskNode.TaskDefinition = taskDef;
taskNode.Initialize(taskDef, false);
// add the task to the document
// ProcessDoExternalDrop(taskNode, false);
// let us get the co-ordinates of the node…
float x = Convert.ToSingle(taskNode.TaskDefinition.LocationX);
float y = Convert.ToSingle(taskNode.TaskDefinition.LocationY);
float w = Convert.ToSingle(taskNode.TaskDefinition.LocationW);
float h = Convert.ToSingle(taskNode.TaskDefinition.LocationH);
taskNode.Bounds = new RectangleF(x, y, w, h);
taskNode.Bounds = new RectangleF(x, y, w, h);

I tried setting the bounds after and before adding it to the document… but of no help… I am only saving node specific bounds, do I need to do anything else???

First, you probably don’t care about the Bounds of the whole node. Do you care if a label changes size, resulting in a change in size of the whole node? If not, then you should be saving and restoring the Bounds of the GoGeneralNode.Icon, not of the whole GoGeneralNode. (More generally, many such situations call for actions on the GoNode.SelectionObject, which in the case of GoGeneralNode is the Icon.)
Second, trying to save the bounds during the OnBoundsChanged method, or in a GoDocument.Changed event handler, is probably at the wrong time. Particularly if GoView.DragsRealtime is true, this will be called a lot, and you probably just care about the “last” change.
You might instead consider implementing a GoDocument.FinishedTransaction event handler (and maybe other related events, such as FinishedUndo and FinishedRedo, depending on your needs). [If you are using a version older than 2.3, you’ll need to override methods to get the same effect.] In the FinishedTransaction event handler you can scan through the GoUndoManagerCompoundEdit to look for the changes you care about, such as the last Bounds changes for each of the GoImages that are the Icons of GoGeneralNodes.
An alternative to a FinishedTransaction event handler is scanning the whole document, seeing if any nodes have moved, or if any nodes have been added or removed.