Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Serializzare treeView
martedì 28 luglio 2009 - 10.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
tatian
Profilo
| Newbie
1
messaggi | Data Invio:
mar 28 lug 2009 - 10:39
Salve a tutti come posso serializzare un oggetto treeview in modo da mantenere intatta gerarchia e tutte le proprietà?
asap
Profilo
| Newbie
3
messaggi | Data Invio:
mar 28 lug 2009 - 11:09
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.
Torna su
Stanze Forum
Elenco Threads
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 !