zoukankan      html  css  js  c++  java
  • 【转】排序TreeView的节点

    http://blog.mdk-photo.com/post/C-Extentionmethod-Tree-Node-View-Sort%28%29.aspx

    Extending C# Tree's

    Sunday, 17 August 2008 22:54 by MartinKirk

    Lets say you have a TreeView or a random TreeNode, that you want to present in sorted state. 

    to make it REALLY easy, we just want to call a single method on either object .Sort() -

        TreeView mytree = new TreeView();
        //add nodes
        mytree.Sort();

    this require that we extend each object like this:

        public static void Sort(this TreeView tv)
        {
            TreeNodeCollection T = tv.Nodes.Sort();
            tv.Nodes.Clear();
            tv.Nodes.AddRange(T);
        }

        public static void Sort(this TreeNode tn)
        {
            TreeNodeCollection T = tn.ChildNodes.Sort();
            tn.ChildNodes.Clear();
            tn.ChildNodes.AddRange(T);
        }

    The sorting algorithm itself is ofcause a recursive descent through the nodes:

        public static TreeNodeCollection Sort(this TreeNodeCollection tnc)
        {
            TreeNodeCollection T = new TreeNodeCollection();

            while (tnc.Count > 0)
            {
                string comp = "";
                TreeNode tmp = new TreeNode() ;

                foreach (TreeNode node in tnc)
                {
                    if (node.Text.CompareTo(comp) > 0)
                    {
                        tmp = node;
                        comp = node.Text;
                    }
                }
                T.AddAt(0,tmp);
                tnc.Remove(tmp);
            }

            foreach (TreeNode sub in T)
            {
                sub.Sort();
            }

            return T;
        }

    The AddRange method i use, is also an extension, since these type of collections dont have such neat feature like Generics' collections

        public static void AddRange(this TreeNodeCollection TNC, TreeNodeCollection Col)
        {
            foreach (TreeNode node in Col)
            {
                TNC.Add(node);
            }
        }

    Sorting has never been easier...

    Now lets look at another missing method on Trees/Nodes : Descendants - known from XPath, a method which returns all nodes descendant to the current node:

        public static List<TreeNode> Descendants(this TreeNode node)
        {
            List<TreeNode> list = new List<TreeNode>();
            list.Add(Recurse(node, list));

            return list;
        }

        private static TreeNode Recurse(TreeNode node, List<TreeNode> list)
        {
            foreach (TreeNode sub in node.ChildNodes)
            {
                list.Add(Recurse(sub, list));
            }
            return node;
        }

  • 相关阅读:
    maven .assembly
    命令参数解析库JCommonder
    OWL,以及XML,RDF
    Ambari是什么?
    上海新桥>风景服务区>宁波江东区车管所 及返程路线
    武汉旅游地图(zz)
    武汉旅游(zz)
    上海市松江区 <> 上海市金山区枫泾·万枫东路ab6177,racehttp://live.racingchina.com/
    明中路明华路到第九人民医院路线
    月台路春申塘桥到虹桥火车站
  • 原文地址:https://www.cnblogs.com/ddeef/p/1558824.html
Copyright © 2011-2022 走看看