// Implementation of IPostBackEventHandler public void RaisePostBackEvent(string eventArgument) { TreeView treeView = Control as TreeView; if (treeView != null) { TreeNodeCollection items = treeView.Nodes; if (!String.IsNullOrEmpty(eventArgument)) { if (eventArgument.StartsWith("s") || eventArgument.StartsWith("e")) { string selectedNodeValuePath = eventArgument.Substring(1).Replace("\\", "/"); TreeNode selectedNode = treeView.FindNode(selectedNodeValuePath); if (selectedNode != null) { bool bSelectedNodeChanged = selectedNode != treeView.SelectedNode; ClearSelectedNode(items); selectedNode.Selected = true; // does not raise the SelectedNodeChanged event so we have to do it manually (below). if (eventArgument.StartsWith("e")) { selectedNode.Expand(); } if (bSelectedNodeChanged) { Extender.RaiseAdaptedEvent("SelectedNodeChanged", new EventArgs()); } } } else if (eventArgument.StartsWith("p")) { string parentNodeValuePath = eventArgument.Substring(1).Replace("\\", "/"); TreeNode parentNode = treeView.FindNode(parentNodeValuePath); if ((parentNode != null) && ((parentNode.ChildNodes == null) || (parentNode.ChildNodes.Count == 0))) { parentNode.Expand(); // Raises the TreeNodePopulate event } } } } }