Serializzare treeView

martedì 28 luglio 2009 - 10.39

tatian Profilo | Newbie

Salve a tutti come posso serializzare un oggetto treeview in modo da mantenere intatta gerarchia e tutte le proprietà?

asap Profilo | Newbie

Io utilizzo il seguente codice:

#region treeView caching / serializing
public void TreeviewLoadXml(TreeView treeView, string fileName)
{
XmlTextReader reader = null;
try
{
// disabling re-drawing of treeview till all nodes are added

//treeView.BeginUpdate();
reader = new XmlTextReader(fileName);
TreeNode parentNode = null;
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == XmlNodeTag)
{
TreeNode newNode = new TreeNode();
bool isEmptyElement = reader.IsEmptyElement;

// loading node attributes

int attributeCount = reader.AttributeCount;
if (attributeCount > 0)
{
for (int i = 0; i < attributeCount; i++)
{
reader.MoveToAttribute(i);
TreeviewSetAttributeValue(newNode,
reader.Name, reader.Value);
}
}
// add new node to Parent Node or TreeView

if (parentNode != null)
{
parentNode.ChildNodes.Add(newNode);
}
else
{
treeView.Nodes.Add(newNode);
}

// making current node 'ParentNode' if its not empty

if (!isEmptyElement)
{
parentNode = newNode;
}
}
}
// moving up to in TreeView if end tag is encountered

else if (reader.NodeType == XmlNodeType.EndElement)
{
if (reader.Name == XmlNodeTag)
{
parentNode = parentNode.Parent;
}
}
else if (reader.NodeType == XmlNodeType.XmlDeclaration)
{
//Ignore Xml Declaration

}
else if (reader.NodeType == XmlNodeType.None)
{
return;
}
else if (reader.NodeType == XmlNodeType.Text)
{
parentNode.ChildNodes.Add(new TreeNode(reader.Value));
}

}
}
finally
{
// enabling redrawing of treeview after all nodes are added

//treeView.EndUpdate();
reader.Close();
}


}
private void TreeviewSetAttributeValue(TreeNode node,
string propertyName, string value)
{
if (propertyName == "Text")
{
node.Text = value;
}
else if (propertyName == "Target")
{
node.Target = value;
}
else if (propertyName == "ToolTip")
{
node.ToolTip = value;
}
else if (propertyName == "NavigateUrl")
{
node.NavigateUrl = value;
}
}
//This function is called recursively until all nodes are loaded
private void TreeviewAddTreeNode(XmlNode xmlNode, TreeNode treeNode)
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList xNodeList;
if (xmlNode.HasChildNodes) //The current node has children
{
xNodeList = xmlNode.ChildNodes;
for (int x = 0; x <= xNodeList.Count - 1; x++)
//Loop through the child nodes
{
xNode = xmlNode.ChildNodes[x];
treeNode.ChildNodes.Add(new TreeNode(xNode.Name));
tNode = treeNode.ChildNodes[x];
TreeviewAddTreeNode(xNode, tNode);
}
}
else //No children, so add the outer xml (trimming off whitespace)
treeNode.Text = xmlNode.OuterXml.Trim();
}
// Xml tag for node, e.g. 'node' in case of <node></node>

private const string XmlNodeTag = "node";
public void Treeview2Xml(TreeView tv, string filename)
{
XmlTextWriter textWriter = new XmlTextWriter(filename,
System.Text.Encoding.ASCII);
// writing the xml declaration tag
textWriter.WriteStartDocument();
//textWriter.WriteRaw("\r\n");

// writing the main tag that encloses all node tags

textWriter.WriteStartElement("TreeView");

// save the nodes, recursive method

TreeviewSaveNode(tv.Nodes, textWriter);

textWriter.WriteEndElement();

textWriter.Close();
}

private void TreeviewSaveNode(TreeNodeCollection nodesCollection,
XmlTextWriter tw)
{
for (int i = 0; i < nodesCollection.Count; i++)
{
TreeNode node = nodesCollection[i];
tw.WriteStartElement(XmlNodeTag);
// node text
tw.WriteAttributeString("Text", node.Text);
// node target
tw.WriteAttributeString("Target", node.Target);
// node tip
tw.WriteAttributeString("ToolTip", node.ToolTip);
// node tip
tw.WriteAttributeString("NavigateUrl", node.NavigateUrl);

if (node.ChildNodes.Count > 0)
{
TreeviewSaveNode(node.ChildNodes, tw);
}
tw.WriteEndElement();
}

}
#endregion

questo l'utilizzo:

// popolare treeview
....
string guid = @"percorso assoluto file xml per salvataggio";
// save
Treeview2Xml(this.TreeView1, guid);
// load
this.TreeView1.Nodes.Clear();
TreeviewLoadXml(this.TreeView1, guid);

spero di esserti di aiuto.
ciao.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5