ASP.Net中的TreeView控件中对节点的上移和下移操作
Web中的TreeView中的没有PreNode和NextNode属性。
但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点。
TreeView中要么只有一个根节点;要么没有根节点,都是并列排的,这个要判断。
这里主要是用了递归,把有子节点的节点一起移动。
1.首先要定义节点集合交换变量
1 TreeNode preNode, nextNode, currentNode;
2 List<TreeNode> currNodelist = new List<TreeNode>();
3 List<TreeNode> Nodelist = new List<TreeNode>();
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);
}
}
}
}
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);
} }
}
4.节点中子节点递归加载到集合中,因为要两两交换,所以定义了两个递归方法
/// <summary>
/// 获取上一个节点的所有子节点,加载到当前节点集合中
/// </summary>
/// <param name="node"></param>
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]);
}
}
/// <summary>
/// 获取下一个节点的所有子节点
/// </summary>
/// <param name="node"></param>
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]);
}
}
5.如果该节点有子节点就要交换子节点,递归加入,我是用ToolTip保存了父节点的ID
private void AddNode(TreeNode node, List<TreeNode> list)
{
List<TreeNode> tnlist = list.Where(n => n.ToolTip == node.Value).ToList();
foreach (TreeNode item in tnlist)
{
node.ChildNodes.Add(item);
AddNode(item, list);
}
}
6.这是个数据交换的方法
1 /// <summary>
2 /// 两节点之间的数据交换
3 /// </summary>
4 /// <param name="current">当前节点</param>
5 /// <param name="node">上一个节点或下一个节点</param>
6 private void Exchange(TreeNode current, TreeNode node)
7 {
8 //判断是否有子节点
9 if (current.ChildNodes.Count > 0)
10 {
11 //获取当前所有节点填充到currNodelist
12 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;//唯一ID
23 string toop = node.ToolTip;//父ID
24 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 }
第一次写博客,嘿嘿!
ASP.Net中的TreeView控件中对节点的上移和下移操作的更多相关文章
- WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色
本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 ...
- 将数据库数据显示到TreeView控件中
实现效果: 知识运用: TreeView控件中的Nodes集合的Add方法 实现代码: private void init() { treeView1.ShowLines = true; treeVi ...
- 【ASP.NET 进阶】TreeView控件学习
这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基本了解了下TreeView控件. TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等. 下面看代码吧: 1.效果图 2.静 ...
- C#中向ListView控件中添加一行数据
C#中向ListView控件中添加一行数据: ,先声明一个ListViewItem: ListViewItem item = new ListViewItem(); ,添加第一列数据: item.Te ...
- 给C#的treeview控件的部分节点添加checkbox
一.先初始化treeview this.treeView1.CheckBoxes = true; this.treeView1.ShowLines = false; this.treeView1.Dr ...
- 在工作表左侧中添加TreeView控件
开发环境基于VSTO:visual studio 2010,VB .Net,excel 2007,文档级别的定制程序. 需求是在sheet的左侧停靠System.Windows.Forms.TreeV ...
- android中去掉ListView控件中的分割线
通过设置android:divider="@null" ,可以去掉ListView控件中的分割线 也可以自定义分割线的颜色,比如: <ListView android:id= ...
- Treeview控件的Node节点延迟加载
Treeview控件是一个很常用的控件,用于展示资源或者组织结构的时候很方便,通常会在系统启动时进行资源的加载和节点目录的初始化,但在资源较多和层级较深的情况下,所有节点加载出来会耗费太多时间,影响体 ...
- 关于WPF中ItemsControl系列控件中Item不能继承父级的DataContext的解决办法
WPF中所有的集合类控件,子项都不能继承父级的DataContext,需要手动将绑定的数据源指向到父级控件才可以. <DataGridTemplateColumn Header="操作 ...
随机推荐
- moviepy音视频开发:音频剪辑基类AudioClip详解
☞ ░ 前往老猿Python博文目录 ░ 一.背景知识介绍 1.1.声音三要素: 音调:人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高. 音量:也就是响度 ...
- 在Python中使用moviepy进行视频剪辑时输出文件报错 ‘NoneType‘ object has no attribute ‘stdout‘问题
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 movipy输出文件时报错 'NoneType' ...
- PHP 的$server变量
PHP中$_SERVER["QUERY_STRING"]函数 详解PHP中$_SERVER函数的QUERY_STRING和 $_SERVER存储当前服务器信息,其中有几个值 如 ...
- LeetCode初级算法之数组:36 有效数独
有效数独 题目地址:https://leetcode-cn.com/problems/valid-sudoku/ 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. ...
- 第七篇 Scrum 冲刺博客
一.站立式会议 1. 会议照片 2. 工作汇报 团队成员名称 昨日完成的工作 今天计划完成的工作 工作中遇到的困难 陈锐基 - 封装消息组件- 我的关注和我的粉丝页面布局- 强化表白墙组件并和详情页对 ...
- 使用eslint将项目中的代码修改统一的缩进
背景 继承了组里师兄师姐写的项目的前端代码,但是是两个人写的,有两格缩进的,有四格缩进的,有字符串外用单引号的,有用双引号的. 于是搜索了一下,可以用eslint强制转化. eslint在github ...
- 算法——K 个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例: 给你这个 ...
- Springboot mini - Solon详解(四)- Solon的事务传播机制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- 代理ip知识
一.没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP_X_FORWARDED_FOR = 没数值或不显示 二.使用 ...
- Big Sur 11.0.1 让2K屏幕开启Hidpi
首先来个成果图: 一.复制显示器配置文件 终端输入命令:cd /System/Library/Displays/Contents/Resources/Overrides 接着输入:open . 打开D ...