指定TreeNode排序

来源:互联网 发布:网站压力测试软件 编辑:程序博客网 时间:2024/06/13 02:25

序:网上好多文章都是整个TreeView的排序,而不是一个TreeNode节点的排序,挺费神的。


button1.Click调用: My_SortTreeNode(treeView1.SelectedNode);  //选定的节点,右键可以添加排序弹出菜单

1.String排序:

        public int TreeNodeCompare(TreeNode x, TreeNode y)
        {
            TreeNode tx = x as TreeNode;
            TreeNode ty = y as TreeNode;
            return String.Compare(tx.Text, ty.Text);
        }

        public void My_SortTreeNode(TreeNode cur_Node)
        {
            Comparison<TreeNode> sorterX = new Comparison<TreeNode>(TreeNodeCompare);
            System.Collections.Generic.List<TreeNode> al = new System.Collections.Generic.List<TreeNode>();

            foreach (TreeNode tn in cur_Node.Nodes)
            {
                al.Add(tn);
            }
            al.Sort(sorterX);

            cur_Node.Nodes.Clear();
            foreach (TreeNode tn in al)
            {
                cur_Node.Nodes.Add(tn);
            }
        }

//////

该例子使用了List的排序功能,才好转换;网上写了一些排序的,但都不好用;有的还不成功的。


下一个例子,使用IP地址进行排序,要复杂一点,其他排序功能都可以根据该方法灵活改变一下,即可》》》》

My_SortTreeNode_byIP(treeView_devTree.SelectedNode);

2.IP地址进行排序:

private int CompareIp(string ipx, string ipy)
        {
            string[] ipxs = ipx.Split('.');
            string[] ipys = ipy.Split('.');

            for (int i = 0; i < 4; i++)
            {
                if (Convert.ToInt32(ipxs[i]) > Convert.ToInt32(ipys[i]))
                {
                    return 1;
                }
                else if (Convert.ToInt32(ipxs[i]) < Convert.ToInt32(ipys[i]))
                {
                    return -1;
                }
                else
                {
                    continue;
                }
            }
            return 0;
        }


        public void My_SortTreeNode_byIP(TreeNode cur_Node)
        {
            Comparison<string> sorterIp = new Comparison<string>(CompareIp);
            System.Collections.Generic.List<string> al = new System.Collections.Generic.List<string>();

            Shawn.WL.WanLongPannel.datadef.DeviceSt devInfo;
            string groupName = cur_Node.Name;

            foreach (TreeNode tn in cur_Node.Nodes)
            {
                Error_devMan_e rslt = devMann.DeviceSeek(treeView_devTree.SelectedNode.Name, tn.Text, out devInfo);
                if (rslt == Error_devMan_e.OK)
                {
                    al.Add(devInfo.net.ipStr);
                }
                else
                {
                    MsgShowError(ErrMsgFromEnum(rslt));
                }
            }

            al.Sort(sorterIp);

            GroupSt tmpGroup = new GroupSt();
            tmpGroup.name = treeView_devTree.SelectedNode.Name;
            tmpGroup.devList = new System.Collections.ArrayList();

            TreeNode tn_tmp = new TreeNode();
            foreach (string sIP in al)
            {
                foreach (TreeNode tn in cur_Node.Nodes)
                {
                    Error_devMan_e rslt = devMann.DeviceSeek(treeView_devTree.SelectedNode.Name, tn.Text, out devInfo);
                    if (sIP == devInfo.net.ipStr && tn.Text == devInfo.name)
                    {
                        TreeNode tn_sub = (TreeNode)tn.Clone();
                        tn_tmp.Nodes.Add(tn_sub);

                        tmpGroup.devList.Add(devInfo);
                        break;
                    }
                }

            }
            cur_Node.Nodes.Clear();
            foreach (TreeNode childNode in tn_tmp.Nodes)
            {
                cur_Node.Nodes.Add(childNode);
            }


        }


17:10 2017/8/10


原创粉丝点击