ASP.Net中的TreeView控件中对节点的上移和下移操作
2013-12-26 14:38
856 查看
Web中的TreeView中的没有PreNode和NextNode属性。
但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点。
TreeView中要么只有一个根节点;要么没有根节点,都是并列排的,这个要判断。
这里主要是用了递归,把有子节点的节点一起移动。
还有一点是,对父节点ID的保存,这里是保存在TreeNode 的Targe属性中
1.首先要定义节点集合交换变量
2.上移按钮的方法
3.下移按钮中的方法
4.节点中子节点递归加载到集合中,因为要两两交换,所以定义了两个递归方法
5.如果该节点有子节点就要交换子节点,递归加入,我是用Target保存了父节点的ID
6.这是个数据交换的方法
第一次写博客,嘿嘿!
但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点。
TreeView中要么只有一个根节点;要么没有根节点,都是并列排的,这个要判断。
这里主要是用了递归,把有子节点的节点一起移动。
还有一点是,对父节点ID的保存,这里是保存在TreeNode 的Targe属性中
1.首先要定义节点集合交换变量
TreeNode preNode, nextNode, currentNode; List<TreeNode> currNodelist = new List<TreeNode>(); 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.如果该节点有子节点就要交换子节点,递归加入,我是用Target保存了父节点的ID
private void AddNode(TreeNode node, List<TreeNode> list) { List<TreeNode> tnlist = list.Where(n => n.Target== node.Value).ToList(); foreach (TreeNode item in tnlist) { node.ChildNodes.Add(item); AddNode(item, list); } }
6.这是个数据交换的方法
/// <summary> /// 两节点之间的数据交换 /// </summary> /// <param name="current">当前节点</param> /// <param name="node">上一个节点或下一个节点</param> private void Exchange(TreeNode current, TreeNode node) { //判断是否有子节点 if (current.ChildNodes.Count > 0) { //获取当前所有节点填充到currNodelist FetchNode(current); } if (node.ChildNodes.Count > 0) { //填充节点到Nodelist(上一节点或下一节点的子节点集合) FetchNextNode(node); } //交换数据 string g_text = node.Text;//文本 string g_tag = node.Target;//排序字段 string g_id = node.Value;//唯一ID string toop = node.ToolTip;//父ID bool isadd = node.PopulateOnDemand;//是否动态填充节点 node.Target = current.Target; node.Text = current.Text; node.Value = current.Value; node.ToolTip = toop; node.PopulateOnDemand = current.PopulateOnDemand; current.Target = g_tag; current.Text = g_text; current.Value = g_id; current.ToolTip = toop; current.PopulateOnDemand = isadd; //选中 node.Selected = true; //先清空后递归添加节点 current.ChildNodes.Clear(); AddNode(current, Nodelist); node.ChildNodes.Clear(); AddNode(node, currNodelist); }
第一次写博客,嘿嘿!
相关文章推荐
- 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)
- 用jQuery实现asp.net 2.0 treeview控件完全无刷新操作实例(AJAX的增、删、改、选择以及展开收缩节点)
- asp.net中两个ListBox 左右互相移动,以及上移、下移
- asp.net datalist绑定数据后可以上移下移实现示例
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)
- asp.net 2.0 中 TreeView控件中的checkbox客户端操作
- 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)
- jQuery操作asp.net treeview控件实例源代码下载
- asp.net使用treeview控件,使用reeNodePopulate事件加载节点
- asp.net datalist绑定数据后可以上移下移
- 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作
- 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作
- ASP.net 中关于控件Treeview的操作------ 节点查找、删除和添加
- ASP.NET 中listbox实现上移下移置顶置底,(支持多选)
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)2005-12-23更新
- asp.net使用treeview控件,使用reeNodePopulate事件加载节点
- asp.net TreeView安装、使用(如何将TreeView打包发布)(带CheckBox选择框的TreeView的初始化,TreeView客户端操作:选择父节点后自动选择所有子节点,子节点选择后自动选择父节点)(TreeView节点精确定位)
- asp.net中两个ListBox 左右互相移动,以及上移、下移 .