using System; using System.Data; namespace BuildingTrees { public class SlowTree { public SlowTree() { } public TreeNode LoadTree(DataView dataTree) { // Prepare the resulting rootnode TreeNode rootNode = null; // Loop through the dataview foreach (DataRowView dataNode in dataTree) { // Store the current record in typed variables int nodeID = (int)dataNode["NodeID"]; int parentNodeID = (int)dataNode["ParentNodeID"]; string text = dataNode["NodeText"].ToString(); // Check if the current node is the rootnode if (nodeID == parentNodeID) { // Yes, so create the node, and start searching for it's child nodes rootNode = new TreeNode(nodeID, null); rootNode.Text = text; LoadChildNodes(rootNode, dataTree); } } // Return the result return rootNode; } private void LoadChildNodes(TreeNode parentNode, DataView dataTree) { // Loop throught the dataview foreach (DataRowView dataNode in dataTree) { // Store the current record in typed variables int nodeID = (int)dataNode["NodeID"]; int parentNodeID = (int)dataNode["ParentNodeID"]; string text = dataNode["NodeText"].ToString(); // Check if the current node is not the root node, and if the current node is a child node of the supplied parent node if (nodeID != parentNodeID && parentNodeID == parentNode.ID) { // Yes, create the node and start searching for it's child nodes. TreeNode node = new TreeNode(nodeID, parentNode); node.Text = text; LoadChildNodes (node, dataTree); } } } } }