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;
        }

  • 相关阅读:
    python学习之模块(pip),列表生成式,模块操作mysql,excel
    python学习之非空即为真,函数,集合,解包与打包
    配置虚拟机和网络配置
    python学习之文件读写,序列化(json,pickle,shelve)
    python学习之列表,元祖,字典
    盒子内部文字超出不换行
    织梦dedecms文章发布日期时间调用标签大全
    贝塞尔曲线值
    CSS解决border影响元素宽高的问题(box-sizing属性)
    pc建站自适应
  • 原文地址:https://www.cnblogs.com/ddeef/p/1558824.html
Copyright © 2011-2022 走看看