diff --git a/插件库/Lskj.Control/TreeViewEx.cs b/插件库/Lskj.Control/TreeViewEx.cs index 9ac3c8f..fe3e92e 100644 --- a/插件库/Lskj.Control/TreeViewEx.cs +++ b/插件库/Lskj.Control/TreeViewEx.cs @@ -122,7 +122,7 @@ namespace Lskj.Control lengthLimitation = int.Parse(TreeNodeLength); treeTable = treeTable.Rows.Cast().Where(y => !string.IsNullOrEmpty(y[TreeNodeKeyField] + "") && (y[TreeNodeKeyField] + "").Length <= lengthLimitation).OrderBy(x => x[TreeNodeKeyField]).CopyToDataTable(); } - + Dictionary> nodesDic = new Dictionary>(); for (int i = 0; i < treeTable.Rows.Count; i++) { DataRow dr = treeTable.Rows[i]; @@ -131,53 +131,97 @@ namespace Lskj.Control if (SystemInfo.Instance.TreeSpecialBinding && treeTable.Columns.Contains("pid")) { - string pKey = dr["pid"]+""; + string pKey = dr["pid"] + ""; //pKey = pKey.Substring(0, pKey.Length - 1); TreeNode[] nodes = tvMain.Nodes.Find(pKey, true); if (nodes.Count() > 0) { TreeNode tNode = nodes[0].Nodes.Add(tnKey, tnStr); + if (nodesDic.ContainsKey(tnKey)) + { + List childNodesList = nodesDic[tnKey]; + childNodesList.Add(tNode); + } + else + { + List childNodesList = new List(); + childNodesList.Add(tNode); + nodesDic.Add(tnKey, childNodesList); + } tNode.Tag = tnKey; } else { TreeNode tNode = this.TreeView.Nodes.Add(tnKey, tnStr); + if (!nodesDic.ContainsKey(tnKey)) + { + nodesDic.Add(tnKey, new List()); + } tNode.Tag = tnKey; } } - else + else { if (tnKey.Length >= TreeDigit * 2) { string pKey = tnKey.Substring(0, tnKey.Length - TreeDigit); + //List nodes = nodesDic.ContainsKey(pKey) ? nodesDic[pKey] : new List(); TreeNode[] nodes = tvMain.Nodes.Find(pKey, true); if (nodes.Count() > 0) { TreeNode tNode = nodes[0].Nodes.Add(tnKey, tnStr); + if (nodesDic.ContainsKey(tnKey)) + { + List childNodesList = nodesDic[tnKey]; + childNodesList.Add(tNode); + } + else + { + List childNodesList = new List(); + childNodesList.Add(tNode); + nodesDic.Add(tnKey, childNodesList); + } tNode.Tag = tnKey; } else { TreeNode tNode = this.TreeView.Nodes.Add(tnKey, tnStr); + if (nodesDic.ContainsKey(tnKey)) + { + List childNodesList = nodesDic[tnKey]; + childNodesList.Add(tNode); + } + else + { + List childNodesList = new List(); + childNodesList.Add(tNode); + nodesDic.Add(tnKey, childNodesList); + } tNode.Tag = tnKey; } } else { TreeNode node = tvMain.Nodes.Add(tnKey, tnStr); + if (nodesDic.ContainsKey(tnKey)) + { + List childNodesList = nodesDic[tnKey]; + childNodesList.Add(node); + } + else + { + List childNodesList = new List(); + childNodesList.Add(node); + nodesDic.Add(tnKey, childNodesList); + } node.Tag = tnKey; } } - - } - - if (!string.IsNullOrWhiteSpace(TreeNodeLength)) { treeTable = treeTableNew.Copy(); treeTable = treeTable.Rows.Cast().Where(y => !string.IsNullOrEmpty(y[TreeNodeKeyField] + "") && (y[TreeNodeKeyField] + "").Length > lengthLimitation).OrderBy(x => x[sort]).CopyToDataTable(); - for (int i = 0; i < treeTable.Rows.Count; i++) { DataRow dr = treeTable.Rows[i]; @@ -185,7 +229,6 @@ namespace Lskj.Control string tnStr = dr[TreeNodeTextField] + ""; string tnKeyNew = tnKey.Substring(0, lengthLimitation); string sortValue = dr[sort] + ""; - if (!sortValue.Contains("-")) { //没有包含 - ,直接加入指定位数的节点中 @@ -193,14 +236,28 @@ namespace Lskj.Control if (nodes.Count() > 0) { TreeNode tNode = nodes[0].Nodes.Add(tnKey, tnStr); + if (nodesDic.ContainsKey(tnKey)) + { + List childNodesList = nodesDic[tnKey]; + childNodesList.Add(tNode); + } + else + { + List childNodesList = new List(); + childNodesList.Add(tNode); + nodesDic.Add(tnKey, childNodesList); + } tNode.Tag = tnKey; } else { TreeNode tNode = this.TreeView.Nodes.Add(tnKey, tnStr); + if (!nodesDic.ContainsKey(tnKey)) + { + nodesDic.Add(tnKey, new List()); + } tNode.Tag = tnKey; } - } else { @@ -215,30 +272,35 @@ namespace Lskj.Control if (nodes.Count() > 0) { TreeNode tNode = nodes[0].Nodes.Add(tnKey, tnStr); + if (nodesDic.ContainsKey(tnKey)) + { + List childNodesList = nodesDic[tnKey]; + childNodesList.Add(tNode); + } + else + { + List childNodesList = new List(); + childNodesList.Add(tNode); + nodesDic.Add(tnKey, childNodesList); + } tNode.Tag = tnKey; } else { TreeNode tNode = this.TreeView.Nodes.Add(tnKey, tnStr); + if (!nodesDic.ContainsKey(tnKey)) + { + nodesDic.Add(tnKey, new List()); + } tNode.Tag = tnKey; } } - } - - //TreeNode[] nodes = tvMain.Nodes.Find(tnKeyNew, true); - } - } - - - - } this.tvMain.EndUpdate(); - // 默认展开第一个节点 if (this.tvMain.Nodes.Count > 0) this.tvMain.Nodes[0].Expand(); @@ -445,7 +507,7 @@ namespace Lskj.Control tNode.Tag = tnKey; } } - else + else { if (tnKey.Length > SpecNoLen) { @@ -1001,41 +1063,4 @@ namespace Lskj.Control if (node.Parent != null) { node.Expand(); - ExpandNode(node.Parent); - } - } - - - - //获得符合条件的节点 - private void SearchLayernew(TreeNode node, string name) - { - //node.BackColor = Color.White; - //node.ForeColor = Color.Black; - if (string.Equals(node.Text, name) || node.Text.Contains(name)) - { - searchtreeNodes.Add(node); - } - if (node.Nodes.Count != 0) - { - for (int i = 0; i < node.Nodes.Count; i++) - { - SearchLayernew(node.Nodes[i], name); - } - } - } - - /// - /// 搜索框回车事件 - /// - /// - /// - private void txt_Key_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - { - BtnSearch_Click(null, null); - } - } - } -} + ExpandNode( \ No newline at end of file