CtrlTreeView.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using Core.StlMes.Client.Qcm.model;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Windows.Forms;
  7. namespace Core.StlMes.Client.Qcm
  8. {
  9. public partial class CtrlTreeView : UserControl
  10. {
  11. private string _code = "";
  12. public string NodeCode
  13. {
  14. get { return _code; }
  15. }
  16. private string _name = "";
  17. public string NodeName
  18. {
  19. get { return _name; }
  20. }
  21. public event EventHandler CtrlTreeViewDoubleClick;
  22. public event TreeViewEventHandler CtrlTreeViewAfterSelect;
  23. public CtrlTreeView(List<TreeViewEntity> list)
  24. {
  25. InitializeComponent();
  26. List<TreeViewEntity> listTmp = list.AsQueryable().Where(a => a.PCode == "").ToList();
  27. foreach (TreeViewEntity treeViewEntity in listTmp)
  28. {
  29. TreeNode tmpNode = new TreeNode(treeViewEntity.Name);
  30. tmpNode.Name = treeViewEntity.Code;
  31. list.Remove(treeViewEntity);
  32. treeView1.Nodes.Add(tmpNode);
  33. if (treeViewEntity.Name == _code)
  34. {
  35. treeView1.SelectedNode = tmpNode;
  36. }
  37. InitTreeView(tmpNode, list);
  38. }
  39. }
  40. //private TreeNode GetTreeViewNode(List<TreeViewEntity> list, string code)
  41. //{
  42. // List<string> listKeys = GetTreeViewNodeKeys(list, code);
  43. // TreeNodeCollection nodes = treeView1.Nodes;
  44. // nodes[listKeys[listKeys.Count - 1]].ExpandAll();
  45. // for (int i = listKeys.Count - 1; i >= 0; i--)
  46. // {
  47. // nodes = nodes[listKeys[i]].Nodes;
  48. // }
  49. // return nodes[code];
  50. //}
  51. //private List<string> GetTreeViewNodeKeys(List<TreeViewEntity> list, string code)
  52. //{
  53. // List<string> listKeys = new List<string>();
  54. // IQueryable<TreeViewEntity> queryable = list.AsQueryable();
  55. // int parentCnt = 1;
  56. // string parentCode = "";
  57. // TreeViewEntity[] treeViewEntitys = queryable.Where(a => a.Code == code).ToArray();
  58. // while (treeViewEntitys.Length > 0)
  59. // {
  60. // parentCode = treeViewEntitys[0].PCode;
  61. // parentCnt = queryable.Where(a => a.Code == parentCode).Count();
  62. // listKeys.Add(parentCode);
  63. // treeViewEntitys = queryable.Where(a => a.Code == parentCode).ToArray();
  64. // }
  65. // return listKeys;
  66. //}
  67. private void InitTreeView(TreeNode node, List<TreeViewEntity> list)
  68. {
  69. List<TreeViewEntity> listTmp = list.AsQueryable().Where(a => a.PCode == node.Name).ToList();
  70. foreach (TreeViewEntity treeViewEntity in listTmp)
  71. {
  72. TreeNode tmpNode = new TreeNode(treeViewEntity.Name);
  73. tmpNode.Name = treeViewEntity.Code;
  74. list.Remove(treeViewEntity);
  75. node.Nodes.Add(tmpNode);
  76. if (treeViewEntity.Name == _code)
  77. {
  78. treeView1.SelectedNode = tmpNode;
  79. }
  80. InitTreeView(tmpNode, list);
  81. }
  82. }
  83. private void treeView1_DoubleClick(object sender, EventArgs e)
  84. {
  85. _code = treeView1.SelectedNode.Name;
  86. _name = treeView1.SelectedNode.Text;
  87. if (CtrlTreeViewDoubleClick != null)
  88. {
  89. CtrlTreeViewDoubleClick(sender, e);
  90. }
  91. }
  92. public void SetTreeViewNodeSelected(string code)
  93. {
  94. if (code == "") treeView1.CollapseAll();
  95. foreach (TreeNode node in treeView1.Nodes)
  96. {
  97. if (node.Name == code) treeView1.SelectedNode = node;
  98. else
  99. {
  100. TreeNode tmpNode = ForeachTreeView(node, code);
  101. if (tmpNode == null) continue;
  102. else treeView1.SelectedNode = tmpNode;
  103. }
  104. }
  105. }
  106. private TreeNode ForeachTreeView(TreeNode node, string code)
  107. {
  108. foreach (TreeNode tmpNode in node.Nodes)
  109. {
  110. if (tmpNode.Name == code) return tmpNode;
  111. else
  112. {
  113. TreeNode tmp2Node = ForeachTreeView(tmpNode, code);
  114. if (tmp2Node == null) continue;
  115. else return tmp2Node;
  116. }
  117. }
  118. return null;
  119. }
  120. private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
  121. {
  122. if (CtrlTreeViewAfterSelect != null)
  123. {
  124. CtrlTreeViewAfterSelect(sender, e);
  125. }
  126. }
  127. }
  128. }