private static void FillTreeKeys(TreeView treeview, DicomDataSet ds, DicomElement ParentKeyElement, TreeNode ParentNode) { DicomElement CurrentKeyElement, CurrentKeyChildElement; TreeNode node; string name; string temp = ""; if (ParentKeyElement == null) { CurrentKeyElement = ds.GetFirstKey(null, true); } else { CurrentKeyElement = ds.GetChildKey(ParentKeyElement); } // Add the keys to the TreeView while (CurrentKeyElement != null) { // Get key name temp = ds.GetKeyValueString(CurrentKeyElement); if ((temp != null) || (temp == "")) { name = temp; } else { name = "UNKNOWN"; } // Add at root or beneath its parent if (ParentNode == null) { node = treeview.Nodes.Add(name); } else { node = ParentNode.Nodes.Add(name); } node.Tag = CurrentKeyElement; // Add the current key's non-key child elements CurrentKeyChildElement = ds.GetChildElement(CurrentKeyElement, true); while (CurrentKeyChildElement != null) { FillKeySubTree(treeview, ds, CurrentKeyChildElement, node, false); CurrentKeyChildElement = ds.GetNextElement(CurrentKeyChildElement, true, true); } // Recursively add child keys if (ds.GetChildKey(CurrentKeyElement) != null) { FillTreeKeys(treeview, ds, CurrentKeyElement, node); } CurrentKeyElement = ds.GetNextKey(CurrentKeyElement, true); } }