private void populateTreeView(List<DoctorServiceRef.Doctor> doctors) { sortedDoctors = doctors.OrderBy(doc => doc.specialty).ToList(); var topNode = new TreeNode("Services"); TreeView1.Nodes.Add(topNode); string currentSpecialty = sortedDoctors.First().specialty; var treeNodes = new List<TreeNode>(); var childNodes = new List<TreeNode>(); foreach (DoctorServiceRef.Doctor doc in sortedDoctors) { if (currentSpecialty == doc.specialty) childNodes.Add(new TreeNode(doc.firstName + " " + doc.lastName)); else { if (childNodes.Count > 0) { TreeNode newNode = new TreeNode(currentSpecialty); foreach (TreeNode node in childNodes) { newNode.ChildNodes.Add(node); } treeNodes.Add(newNode); childNodes = new List<TreeNode>(); } childNodes.Add(new TreeNode(doc.firstName + " " + doc.lastName)); currentSpecialty = doc.specialty; } } if (childNodes.Count > 0) { TreeNode newNode = new TreeNode(currentSpecialty); foreach (TreeNode node in childNodes) { newNode.ChildNodes.Add(node); } treeNodes.Add(newNode); } foreach (TreeNode node in treeNodes) { TreeView1.Nodes.Add(node); } TreeView1.CollapseAll(); TreeView1.DataBind(); }