private void recurse_and_set_values(Search_Result_Item_TreeNode parent_node, string parent_value) { foreach (Search_Result_Item_TreeNode childNode in parent_node.ChildNodes) { childNode.Value = parent_value + "_" + childNode.Name; nodeHash[childNode.Value] = childNode; recurse_and_set_values(childNode, childNode.Value); } }
/// <summary> Event handler loads the nodes on request to the serial hierarchy trees when the user requests them /// by expanding a node </summary> /// <param name="Sender"> TreeView object that fired this event </param> /// <param name="E"> Event arguments includes the tree node which was expanded </param> void treeView1_TreeNodePopulate(object Sender, TreeNodeEventArgs E) { // Determine the index of this result within the entire page of results string resultsIndex = E.Node.Value; string node_value = E.Node.Value; if (E.Node.Value.IndexOf("_") > 0) { resultsIndex = E.Node.Value.Substring(0, E.Node.Value.IndexOf("_")); node_value = node_value.Substring(resultsIndex.Length + 1); } // Get the appropriate title result iSearch_Title_Result titleResult = PagedResults[Convert.ToInt32(resultsIndex)]; // Is this tree built? if (titleResult.Item_Tree == null) { titleResult.Build_Item_Tree(resultsIndex); } Search_Result_Item_TreeNode retrieved_node = titleResult.Item_Tree.Get_Node_By_Value(node_value); if (retrieved_node == null) { return; } string base_url = RequestSpecificValues.Current_Mode.Base_URL; if (RequestSpecificValues.Current_Mode.Writer_Type == Writer_Type_Enum.HTML_LoggedIn) { base_url = RequestSpecificValues.Current_Mode.Base_URL + "l/"; } foreach (Search_Result_Item_TreeNode childNode in retrieved_node.ChildNodes) { TreeNode childViewNode = new TreeNode { Value = resultsIndex + "_" + childNode.Value, SelectAction = TreeNodeSelectAction.None }; string name = UI_ApplicationCache_Gateway.Translation.Get_Translation(childNode.Name, RequestSpecificValues.Current_Mode.Language); string tooltip = String.Empty; if (name.Length > 100) { tooltip = name; name = name.Substring(0, 100) + "..."; } if (childNode.Link.Length > 0) { childViewNode.ToolTip = tooltip; childViewNode.Text = "<a href=\"" + base_url + childNode.Link + textRedirectStem + "\">" + name + "</a>"; } else { childViewNode.ToolTip = tooltip; childViewNode.Text = name; } if (childNode.ChildNodes.Count > 0) { childViewNode.PopulateOnDemand = true; } E.Node.ChildNodes.Add(childViewNode); } }
/// <summary> Add new root node to this tree </summary> /// <param name="Name"> Display name for this new root node (title of the item group at the root node level) </param> /// <param name="Link"> Link for this new root node of the tree, or empty if no link </param> /// <param name="Value"> Value of this new root node (actually the BibID + '_' + VID) </param> /// <returns> Built sorted tree node object </returns> public Search_Result_Item_TreeNode Add_Root_Node(string Name, string Link, string Value) { Search_Result_Item_TreeNode newRootNode = new Search_Result_Item_TreeNode(Name, Link, Value); rootNodes.Add(newRootNode); return newRootNode; }
/// <summary> Builds the tree of items under this title, for multiple item titles </summary> public void Build_Item_Tree(string ResultsIndex) { // Create the tree itemTree = new Search_Result_Item_Tree(); // Add a root node Search_Result_Item_TreeNode myRootNode = itemTree.Add_Root_Node("ROOT", String.Empty, bibid); // Is this a newspaper type (handles display slightly differently) bool newspaper = false; if (materialtype.ToUpper().IndexOf("NEWSPAPER") >= 0) { newspaper = true; } // Placeholders for the day that we begin having four levels of serial hierarchy string thischildLevel4Text = String.Empty; const int thischildLevel4Index = -1; // Add each seperate child row to the Items_Within_Title set Dictionary <string, Search_Result_Item_TreeNode> level1Nodes = new Dictionary <string, Search_Result_Item_TreeNode>(); Dictionary <string, Search_Result_Item_TreeNode> level2Nodes = new Dictionary <string, Search_Result_Item_TreeNode>(); Dictionary <string, Search_Result_Item_TreeNode> level3Nodes = new Dictionary <string, Search_Result_Item_TreeNode>(); foreach (iSearch_Item_Result thisChild in itemList) { // Determine the final link for this item string itemLink = bibid + "/" + thisChild.VID; string level1Text = thisChild.Level1_Text; string level2Text = thisChild.Level2_Text; string level3Text = thisChild.Level3_Text; string level4Text = thischildLevel4Text; // The logic to add all the nodes for this item. This is large in an attempt to make it // frighteningly quick if (level4Text.Length > 0) { if (level3Nodes.ContainsKey(level1Text + "_" + level2Text + "_" + level3Text)) { level3Nodes[level1Text + "_" + level2Text + "_" + level3Text].Add_Child_Node(level4Text, itemLink, thischildLevel4Index); } else { if (level2Nodes.ContainsKey(level1Text + "_" + level2Text)) { level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, String.Empty, thisChild.Level3_Index); } else { if (level1Nodes.ContainsKey(level1Text)) { level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index); } else { level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, 0); level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index); } level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, String.Empty, thisChild.Level3_Index); } level3Nodes[level1Text + "_" + level2Text + "_" + level3Text].Add_Child_Node(level4Text, itemLink, thischildLevel4Index); } } else { if (level3Text.Length > 0) { if ((newspaper) && (level3Text.IndexOf(level2Text) < 0) && (level3Text.IndexOf(level1Text) < 0)) { string date = level2Text + " " + level3Text + ", " + level1Text; if (level2Nodes.ContainsKey(level1Text + "_" + level2Text)) { level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(date, itemLink, thisChild.Level3_Index); } else { if (level1Nodes.ContainsKey(level1Text)) { level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index); } else { level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, thisChild.Level1_Index); level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index); } level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(date, itemLink, thisChild.Level3_Index); } } else { if (level2Nodes.ContainsKey(level1Text + "_" + level2Text)) { level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, itemLink, thisChild.Level3_Index); } else { if (level1Nodes.ContainsKey(level1Text)) { level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index); } else { level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, thisChild.Level1_Index); level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index); } level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, itemLink, thisChild.Level3_Index); } } } else { if (level2Text.Length > 0) { if (level1Nodes.ContainsKey(level1Text)) { level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, itemLink, thisChild.Level2_Index); } else { level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, thisChild.Level1_Index); level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, itemLink, thisChild.Level2_Index); } } else { if (level1Text.Length > 0) { level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, itemLink, thisChild.Level1_Index); } else { level1Nodes[thisChild.Title] = myRootNode.Add_Child_Node(thisChild.Title, itemLink, 0); } } } } } // Set the hash values, for lookup by id itemTree.Set_Values(); }