using Core.StlMes.Client.Qcm.model; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows.Forms; namespace Core.StlMes.Client.Qcm { public partial class CtrlTreeView : UserControl { private string _code = ""; public string NodeCode { get { return _code; } } private string _name = ""; public string NodeName { get { return _name; } } public event EventHandler CtrlTreeViewDoubleClick; public event TreeViewEventHandler CtrlTreeViewAfterSelect; public CtrlTreeView(List list) { InitializeComponent(); List listTmp = list.AsQueryable().Where(a => a.PCode == "").ToList(); foreach (TreeViewEntity treeViewEntity in listTmp) { TreeNode tmpNode = new TreeNode(treeViewEntity.Name); tmpNode.Name = treeViewEntity.Code; list.Remove(treeViewEntity); treeView1.Nodes.Add(tmpNode); if (treeViewEntity.Name == _code) { treeView1.SelectedNode = tmpNode; } InitTreeView(tmpNode, list); } } //private TreeNode GetTreeViewNode(List list, string code) //{ // List listKeys = GetTreeViewNodeKeys(list, code); // TreeNodeCollection nodes = treeView1.Nodes; // nodes[listKeys[listKeys.Count - 1]].ExpandAll(); // for (int i = listKeys.Count - 1; i >= 0; i--) // { // nodes = nodes[listKeys[i]].Nodes; // } // return nodes[code]; //} //private List GetTreeViewNodeKeys(List list, string code) //{ // List listKeys = new List(); // IQueryable queryable = list.AsQueryable(); // int parentCnt = 1; // string parentCode = ""; // TreeViewEntity[] treeViewEntitys = queryable.Where(a => a.Code == code).ToArray(); // while (treeViewEntitys.Length > 0) // { // parentCode = treeViewEntitys[0].PCode; // parentCnt = queryable.Where(a => a.Code == parentCode).Count(); // listKeys.Add(parentCode); // treeViewEntitys = queryable.Where(a => a.Code == parentCode).ToArray(); // } // return listKeys; //} private void InitTreeView(TreeNode node, List list) { List listTmp = list.AsQueryable().Where(a => a.PCode == node.Name).ToList(); foreach (TreeViewEntity treeViewEntity in listTmp) { TreeNode tmpNode = new TreeNode(treeViewEntity.Name); tmpNode.Name = treeViewEntity.Code; list.Remove(treeViewEntity); node.Nodes.Add(tmpNode); if (treeViewEntity.Name == _code) { treeView1.SelectedNode = tmpNode; } InitTreeView(tmpNode, list); } } private void treeView1_DoubleClick(object sender, EventArgs e) { _code = treeView1.SelectedNode.Name; _name = treeView1.SelectedNode.Text; if (CtrlTreeViewDoubleClick != null) { CtrlTreeViewDoubleClick(sender, e); } } public void SetTreeViewNodeSelected(string code) { if (code == "") treeView1.CollapseAll(); foreach (TreeNode node in treeView1.Nodes) { if (node.Name == code) treeView1.SelectedNode = node; else { TreeNode tmpNode = ForeachTreeView(node, code); if (tmpNode == null) continue; else treeView1.SelectedNode = tmpNode; } } } private TreeNode ForeachTreeView(TreeNode node, string code) { foreach (TreeNode tmpNode in node.Nodes) { if (tmpNode.Name == code) return tmpNode; else { TreeNode tmp2Node = ForeachTreeView(tmpNode, code); if (tmp2Node == null) continue; else return tmp2Node; } } return null; } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (CtrlTreeViewAfterSelect != null) { CtrlTreeViewAfterSelect(sender, e); } } } }