博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.Net中的TreeView控件中对节点的上移和下移操作
阅读量:6503 次
发布时间:2019-06-24

本文共 5850 字,大约阅读时间需要 19 分钟。

Web中的TreeView中的没有PreNode和NextNode属性。

但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点。

TreeView中要么只有一个根节点;要么没有根节点,都是并列排的,这个要判断。

这里主要是用了递归,把有子节点的节点一起移动。

1.首先要定义节点集合交换变量

1    TreeNode preNode, nextNode, currentNode;2     List
currNodelist = new List
();3 List
Nodelist = new List
();

 2.上移按钮的方法

//当前选中节点        currentNode = TreeView1.SelectedNode;        if (currentNode == null)        {            return;        }        else        {            //判断是否有父节点,根据父节点取数据            if (currentNode.Parent != null)            {                //前一个节点索引                int pre = currentNode.Parent.ChildNodes.IndexOf(TreeView1.SelectedNode) - 1;                if (pre == -1)                { return; }                else                {                    //第一个节点                    TreeNode fisrtnode = currentNode.Parent.ChildNodes[0];                    //前一个节点                    preNode = currentNode.Parent.ChildNodes[pre];                    //判断第一个节点是否自己                    if (currentNode == preNode)                    { return; }                    else                    {                        //交换数据,并选中                        Exchange(currentNode, preNode);                    }                }            }            else//没有父节点,直接从根节点读            {                //前一个节点索引                int pre = this.TreeView1.Nodes.IndexOf(TreeView1.SelectedNode) - 1;                if (pre == -1)                { return; }                else                {                    //第一个节点                    TreeNode fisrtnode = this.TreeView1.Nodes[0];                    //前一个节点                    preNode = this.TreeView1.Nodes[pre];                    //判断第一个节点是否自己                    if (currentNode == preNode)                    { return; }                    else                    {                        //交换数据,并选中                        Exchange(currentNode, preNode);                    }                }            }        }
View Code

3.下移按钮中的方法

currentNode = TreeView1.SelectedNode;        if (currentNode == null)        {            return;        }        else        {            if (currentNode.Parent != null)            {                //下一个节点索引                int next = currentNode.Parent.ChildNodes.IndexOf(TreeView1.SelectedNode) + 1;                //最后一个节点                TreeNode lastnode = currentNode.Parent.ChildNodes[currentNode.Parent.ChildNodes.Count - 1];                if (lastnode == currentNode)                { return; }                else                {                    //下一个节点                    nextNode = currentNode.Parent.ChildNodes[next];                    //交换数据                    Exchange(currentNode, nextNode);                }            }            else            {                //下一个节点索引                int next = this.TreeView1.Nodes.IndexOf(TreeView1.SelectedNode) + 1;                //最后一个节点                TreeNode lastnode = this.TreeView1.Nodes[this.TreeView1.Nodes.Count - 1];                //判断最一个节点是否自己                if (lastnode == currentNode)                { return; }                else                {                    //下一个节点                    nextNode = this.TreeView1.Nodes[next];                    Exchange(currentNode, nextNode);                }            }        }
View Code

4.节点中子节点递归加载到集合中,因为要两两交换,所以定义了两个递归方法

///     /// 获取上一个节点的所有子节点,加载到当前节点集合中    ///     ///     private void FetchNode(TreeNode node)    {        for (int i = 0; i < node.ChildNodes.Count; i++)        {            currNodelist.Add(node.ChildNodes[i]);        }        for (int j = 0; j < node.ChildNodes.Count; j++)        {            FetchNode(node.ChildNodes[j]);        }    }    ///     /// 获取下一个节点的所有子节点    ///     ///     private void FetchNextNode(TreeNode node)    {        for (int i = 0; i < node.ChildNodes.Count; i++)        {            Nodelist.Add(node.ChildNodes[i]);        }        for (int j = 0; j < node.ChildNodes.Count; j++)        {            FetchNextNode(node.ChildNodes[j]);        }    }
View Code

5.如果该节点有子节点就要交换子节点,递归加入,我是用ToolTip保存了父节点的ID

private void AddNode(TreeNode node, List
list) { List
tnlist = list.Where(n => n.ToolTip == node.Value).ToList(); foreach (TreeNode item in tnlist) { node.ChildNodes.Add(item); AddNode(item, list); } }
View Code

6.这是个数据交换的方法

1  ///  2     /// 两节点之间的数据交换 3     ///  4     /// 当前节点 5     /// 上一个节点或下一个节点 6     private void Exchange(TreeNode current, TreeNode node) 7     { 8         //判断是否有子节点 9         if (current.ChildNodes.Count > 0)10         {11             //获取当前所有节点填充到currNodelist12             FetchNode(current);13         }14         if (node.ChildNodes.Count > 0)15         {16             //填充节点到Nodelist(上一节点或下一节点的子节点集合)17             FetchNextNode(node);18         }19         //交换数据20         string g_text = node.Text;//文本21         string g_tag = node.Target;//排序字段22         string g_id = node.Value;//唯一ID23         string toop = node.ToolTip;//父ID24         bool isadd = node.PopulateOnDemand;//是否动态填充节点25 26         node.Target = current.Target;27         node.Text = current.Text;28         node.Value = current.Value;29         node.ToolTip = toop;30         node.PopulateOnDemand = current.PopulateOnDemand;31 32         current.Target = g_tag;33         current.Text = g_text;34         current.Value = g_id;35         current.ToolTip = toop;36         current.PopulateOnDemand = isadd;37         //选中38         node.Selected = true;39         //先清空后递归添加节点40         current.ChildNodes.Clear();41         AddNode(current, Nodelist);42         node.ChildNodes.Clear();43         AddNode(node, currNodelist);44     }
View Code

 

第一次写博客,嘿嘿!大笑

 

转载于:https://www.cnblogs.com/abcde102978/p/3492649.html

你可能感兴趣的文章
编程java梦想数_JAVA基础总结
查看>>
java初始化重排_JAVA并发环境下指令重排带来的问题
查看>>
java connection 共享_【java項目實戰】ThreadLocal封裝Connection,實現同一線程共享資源...
查看>>
java中锁的等级_深入浅出!对象级别锁 vs 类级别锁 – Java
查看>>
php 5.4 memcache,linux下php5.4添加memcache扩展
查看>>
php session作用,session的作用是什么
查看>>
php 两行数据合并,PHP如何实现统计数据合并
查看>>
java国外研究综述,国内外研究现状_毕业论文
查看>>
php执行事务,thinkPHP框架中执行事务的方法示例
查看>>
php 两个值比较大小写,php比较两个字符串(大小写敏感)的函数strcmp()
查看>>
java3d获取模型在xoy平面的投影,将3D世界点投影到新视图图像平面
查看>>
php 修改图片src,jq修改src图片地址 .attr is not a function
查看>>
sudo php 无法打开,从PHP / Apache,exec()或system()程序作为root用户:“ sudo:无法打开审核系统:权限被拒绝”...
查看>>
sql数据库java连接sqlserver2005数据库
查看>>
clientapivc api TCP&UDP—helloworld
查看>>
下划线的学习1
查看>>
在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制
查看>>
单例模式 - 程序实现(Java)
查看>>
如何隐藏Cognos Viewer
查看>>
响应式网页设计:rem、em设置网页字体大小自适应
查看>>