指定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
- 指定TreeNode排序
- TreeNode
- 关于TreeNode
- 3.4 指定排序方向
- 指定谓词函数排序
- List 指定属性排序
- oracle指定排序方法
- 实现指定顺序排序
- sql指定数据排序
- javascript指定排序方式
- Launcher2指定排序
- java 指定排序
- 根据指定规则排序
- 按照指定顺序排序
- 聚合分组指定排序
- tp指定id排序
- TreeNode 使用小节
- TreeNode选择函数
- 存储图和训练好的权重
- 7---LeetCode【tag: Array】【Stock I】|C语言|总结
- 隐藏系统返回按钮,保留系统滑动返回
- 前端初学学习进程V
- KINECT2.0开发实践_1:简单介绍
- 指定TreeNode排序
- Java NIO
- 拆红包特效
- 调用一个脚本
- javascript 循环遍历
- 一个基于ES6+webpack的vue小demo
- 抽象类和接口的功能与区别
- 关于一些基础的Java问题的解答(九)
- jQuery 代码编写优化