Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>So I have a working version of code that takes care of your requirement. The trick is to check whether the node already exists and add to that instead of creating a new node everytime. We do the tree view generation in steps <li>1. Get a List of Mappings from XML</li> <li>2. Generate TreeView by iterating through the mapping List</li></p> <p>Notes : <li>1. This code can be optimized further, but I would leave that to you </li> <li>2. <code>treeView1</code> refers to an object of type <code>System.Windows.Forms.TreeView</code></p> <pre><code> /// &lt;summary&gt; /// Initalizes Tree View /// &lt;/summary&gt; private void InitializeTreeView() { var mappingList = ReadXmlData(); BuildTree(mappingList); } /// &lt;summary&gt; /// Reads Mappings from xml file to a List /// &lt;/summary&gt; /// &lt;returns&gt;&lt;/returns&gt; private List&lt;Mapping&gt; ReadXmlData() { var mappingList = new List&lt;Mapping&gt;(); var reader = new XmlTextReader(@"D:\data.xml"); while (reader.Read()) { reader.ReadToFollowing("system"); string system = reader.ReadString(); reader.ReadToFollowing("subsystem"); string subSystem = reader.ReadString(); reader.ReadToFollowing("subsubsystem"); string subSubSystem = reader.ReadString(); mappingList.Add(new Mapping() { _system = system, _subSystem = subSystem, _subSubSystem = subSubSystem }); } return mappingList; } /// &lt;summary&gt; /// Builds Tree /// &lt;/summary&gt; /// &lt;param name="mappingList"&gt;&lt;/param&gt; private void BuildTree(List&lt;Mapping&gt; mappingList) { foreach (var mapping in mappingList) { var systemNode = FindNode(mapping._system, NodeType.System); if (string.IsNullOrEmpty(systemNode.Text)) { string nodeText = NodeType.System.ToString() + " - " + mapping._system; ; systemNode.Text = nodeText; systemNode.Name = nodeText; treeView1.Nodes.Add(systemNode); } var subSystemNode = FindNode(mapping._subSystem, NodeType.SubSystem); if (string.IsNullOrEmpty(subSystemNode.Text)) { string nodeText = NodeType.SubSystem.ToString() + " - " + mapping._subSystem; subSystemNode.Text = nodeText; subSystemNode.Name = nodeText; systemNode.Nodes.Add(subSystemNode); } var subSubSystemNode = FindNode(mapping._subSubSystem, NodeType.SubSubSystem); if (string.IsNullOrEmpty(subSubSystemNode.Text)) { string nodeText = NodeType.SubSubSystem.ToString() + " - " + mapping._subSubSystem; subSubSystemNode.Text = nodeText; subSubSystemNode.Name = nodeText; subSystemNode.Nodes.Add(subSubSystemNode); } } } /// &lt;summary&gt; /// Returns an existing node from the treeview other-wise returns a new node /// &lt;/summary&gt; /// &lt;param name="data"&gt;&lt;/param&gt; /// &lt;param name="type"&gt;&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; private TreeNode FindNode(string data, NodeType type) { string text = type.ToString() + " - " + data; if (treeView1.Nodes.Find(text, true).FirstOrDefault() != null) { return treeView1.Nodes.Find(text, true).FirstOrDefault(); } else { return new TreeNode(); } } /// &lt;summary&gt; /// Class for Mapping /// &lt;/summary&gt; public class Mapping { public string _system; public string _subSystem; public string _subSubSystem; } /// &lt;summary&gt; /// Type of Node /// &lt;/summary&gt; public enum NodeType { System = 0, SubSystem = 1, SubSubSystem = 2 } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload