|
using System;
using System.Collections;
using System.Data;
namespace BuildingTrees
{
public class FastTree
{
private Hashtable nodeList = new Hashtable();
public FastTree()
{
}
public TreeNode LoadTree(DataView dataTree)
{
// Loop through all records in the dataview
foreach (DataRowView dataNode in dataTree)
{
// Store the current record in some typed variables
int nodeID = (int)dataNode["NodeID"];
int parentNodeID = (int)dataNode["ParentNodeID"];
string text = dataNode["NodeText"].ToString();
// Check if the node was already created
if (nodeList.Contains(nodeID))
{
// Yes, fill in the missing properties
TreeNode node = (TreeNode)nodeList[nodeID];
node.Text = text;
// If the node is not a root node, and there's no parent yet, look up or create
if (nodeID != parentNodeID && node.ParentNode == null)
{
TreeNode parentNode = null;
// Check if the parentnode was already created
if (nodeList.Contains(parentNodeID))
{
// Yes, so use that one
parentNode = (TreeNode)nodeList[parentNodeID];
}
else
{
// The parentnode doesn't exist yet, so create a partial parentnode.
parentNode = new TreeNode(parentNodeID, null);
nodeList.Add(parentNodeID, parentNode);
}
node.ParentNode = parentNode;
}
}
else
{
// New node, check if it's a root node
if (nodeID == parentNodeID)
{
// Yes, so no need for looking up or creating a parentnode
TreeNode node = new TreeNode(nodeID, null);
node.Text = text;
nodeList.Add(nodeID, node);
}
else
{
// New child node
TreeNode parentNode = null;
// Check if the parentnode was already created
if (nodeList.Contains(parentNodeID))
{
// Yes, so use that one
parentNode = (TreeNode)nodeList[parentNodeID];
}
else
{
// No, so create a partial parentnode.
parentNode = new TreeNode(parentNodeID, null);
nodeList.Add(parentNodeID, parentNode);
}
// Create the new node
TreeNode node = new TreeNode(nodeID, parentNode);
node.Text = text;
nodeList.Add(nodeID, node);
}
}
}
// Find the rootnode
IDictionaryEnumerator nodeEnumerator = nodeList.GetEnumerator();
while (nodeEnumerator.MoveNext())
{
TreeNode node = (TreeNode)nodeEnumerator.Value;
if (node.ParentNode == null)
return node;
}
// Return nothing if no rootnode was found
return null;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.