TreeView 递归 去 一个节点下 所有 叶子节点的问题,在线等待高人帮忙,急~!

问题描述

我把没用的代码都去掉,核心代码就是下面的,点击树上的某个控件之后,用递归把其下面的所有叶节点全部取出来,但是出了错,在线等待高人解答错在哪里,或者直接告诉我应该怎么取//点击树上的某个节点protectedvoidtvCate_SelectedNodeChanged(objectsender,EventArgse){//利用递归获取他所有的子节点tn=tvCate.getSelectedNode();TreeNodetn2=newTreeNode();getLeafNode(tn,tn2);}}///<summary>///利用递归获取一个节点的所有叶子///</summary>///<paramname="tn">TreeNode</param>///<paramname="al"></param>protectedvoidgetLeafNode(TreeNodemyTn,TreeNodetn2){for(inti=0;i<myTn.ChildNodes.Count;i++){if(myTn.ChildNodes[i].ChildNodes.Count==0){tn2.ChildNodes.Add(myTn.ChildNodes[i]);}else{getLeafNode(myTn.ChildNodes[i],tn2);}}}

解决方案

解决方案二:

以前找的一个,你试试js:<scriptlanguage="javascript">//获取元素指定tagName的父元素functionpublic_GetParentByTagName(element,tagName){varparent=element.parentNode;varupperTagName=tagName.toUpperCase();//如果这个元素还不是想要的tag就继续上溯while(parent&&(parent.tagName.toUpperCase()!=upperTagName)){parent=parent.parentNode?parent.parentNode:parent.parentElement;}returnparent;}//设置节点的父节点Cheched——该节点可访问,则它的父节点也必能访问functionsetParentChecked(objNode){varobjParentDiv=public_GetParentByTagName(objNode,"div");if(objParentDiv==null||objParentDiv=="undefined"){return;}varobjID=objParentDiv.getAttribute("ID");objID=objID.substring(0,objID.indexOf("Nodes"));objID=objID+"CheckBox";varobjParentCheckBox=document.getElementById(objID);if(objParentCheckBox==null||objParentCheckBox=="undefined"){return;}if(objParentCheckBox.tagName!="INPUT"&&objParentCheckBox.type=="checkbox")return;objParentCheckBox.checked=true;setParentChecked(objParentCheckBox);}//设置节点的子节点uncheched——该节点不可访问,则它的子节点也不能访问functionsetChildUnChecked(divID){varobjchild=divID.children;varcount=objchild.length;for(vari=0;i<objchild.length;i++){vartempObj=objchild[i];if(tempObj.tagName=="INPUT"&&tempObj.type=="checkbox"){tempObj.checked=false;}setChildUnChecked(tempObj);}}//设置节点的子节点cheched——该节点可以访问,则它的子节点也都能访问functionsetChildChecked(divID){varobjchild=divID.children;varcount=objchild.length;for(vari=0;i<objchild.length;i++){vartempObj=objchild[i];if(tempObj.tagName=="INPUT"&&tempObj.type=="checkbox"){tempObj.checked=true;}setChildChecked(tempObj);}}//触发事件functionCheckEvent(){varobjNode=event.srcElement;if(objNode.tagName!="INPUT"||objNode.type!="checkbox")return;if(objNode.checked==true){setParentChecked(objNode);varobjID=objNode.getAttribute("ID");varobjID=objID.substring(0,objID.indexOf("CheckBox"));varobjParentDiv=document.getElementById(objID+"Nodes");if(objParentDiv==null||objParentDiv=="undefined"){return;}setChildChecked(objParentDiv);}else{varobjID=objNode.getAttribute("ID");varobjID=objID.substring(0,objID.indexOf("CheckBox"));varobjParentDiv=document.getElementById(objID+"Nodes");if(objParentDiv==null||objParentDiv=="undefined"){return;}setChildUnChecked(objParentDiv);}}</script>cs:this.TreeView1.Attributes.Add("onclick","CheckEvent()");
解决方案三:

递归要有返回值,(或者把返回值放在参数里),不论哪个分之,还有你的循环也许春在问题
解决方案四:

///<summary>///利用递归获取一个节点的所有叶子///</summary>///<paramname="tn">TreeNode</param>///<paramname="al"></param>protectedvoidgetLeafNode(TreeNodemyTn,TreeNodetn2){for(inti=0;i<myTn.ChildNodes.Count;i++){if(myTn.ChildNodes[i].ChildNodes.Count>0){getLeafNode(myTn.ChildNodes[i],tn2);}tn2.ChildNodes.Add(myTn.ChildNodes[i]);}}

解决方案五:

你只要叶子啊,汗没看到你的代码应该是可以的报什么错
解决方案六:

你的代码没什么问题呀,把报错信息贴上来看看
解决方案七:

你的代码好像没有什么问题啊
解决方案八:

代码不报错的就是点击了之后,该节点下的子节点就会丢失一个,我不知道怎么会出现这种问题!
解决方案九:

TreeNodetn2=newTreeNode();你声明了一个新的结点,然后递归查找到叶结点,然后就tn2.ChildNodes.Add(myTn.ChildNodes[i]);问题是你这样做就相当于把这个叶结点从树里移动到tn2里,当然就会丢了啊
解决方案十:

我这个tn2不过是一个集合用来暂时存放这些叶节点的,难道说我把这些叶节点加到其他的TreeNode中存放,它会自动把原来的删除掉?那我应该怎么做比较合理啊?请各位高手给个解决的方法吧!
解决方案十一:

一下这是异常信息,请求高手哦!说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.InvalidOperationException:集合已修改;可能无法执行枚举操作。源错误:行98:protectedvoidgetLeafNode(TreeNodetn,refTreeNodeCollectiontnCollection)行99:{行100:foreach(TreeNodechildNodeintn.ChildNodes)行101:{行102:if(childNode.ChildNodes.Count==0)
解决方案十二:

没人理我?高手在哪里?
解决方案十三:

我也遇到了这个问题,很奇怪,在add的时候总是会减掉一个,和C/S下的TreeNode很不一样,所以只能改成用while的方法了while(myTn.ChildNodes.Count>0){tn2.ChildNodes.Add(myTn.ChildNodes[0]);}

时间: 2024-08-30 06:27:11

TreeView 递归 去 一个节点下 所有 叶子节点的问题,在线等待高人帮忙,急~!的相关文章

怎样判断ExtJS 异步tree的某个节点下的所有节点都已经加载了

问题描述 最近在项目中遇到一个Ext 异步树头痛的问题:树中的每个节点都有一个checkbox,当勾选父节点时,也需要将其所有的子节点都选中,但是问题是当前还没有加载这些子节点.知道可以通过对父节点加tree.on(checkedchange,function(node){node.expand(..递归.)});的形式逐个展开所有的子节点,但是怎样才能知道父节点下的所有子节点都被展开选中了呢? 因为要在这之后对该父节点和其所有子节点做一些操作. tree.on('checkedchange',

利用java算法排列组合父节点下的子节点

问题描述 利用java算法排列组合父节点下的子节点 一个item下有多个父节点,一个父节点下面有多个子节点,通过遍历父节点把每个父节点的子节点遍历出来,然后对子节点进行组合,求大神帮我补全代码 List parents = mrItemDimCombMybatisDao.getAllParentByItem(itemId); for (MrItemDim parent : parents) { List sons = mrItemDimCombMybatisDao.getAllSonByPare

数据结构例程——从根节点到每个叶子节点的路径之逆

本文是数据结构基础系列(6):树和二叉树中第11课时二叉树遍历非递归算法和第12课时层次遍历算法的例程. 问题:设计算法输出从根节点到每个叶子节点的路径之逆. 解法1:利用二叉树后序遍历非递归算法中,每一个叶子节点出现时,栈中从栈顶到栈底,正好是叶子节点到根节点的逆序的性质编写. [参考解答](btreee.h见算法库) #include <stdio.h> #include "btree.h" void AllPath1(BTNode *b) { BTNode *St[M

JDBC一个connection下多线程查询表数据会产生线程等待

问题描述 JDBC一个connection下多线程查询表数据会产生线程等待 案例: 从Oracle数据库将表及数据通过JDBC的方式采集到另一Oracle数据库,数据量均为千万级,从源数据库读取的时候采用ORACLE的ROWNUM分页方式,JDBC每次读取1000条,批量插入目标库,测试发现ORACLE的ROWNUM分页效率很是问题,越到后面越慢,WEBLOGIC后台甚至出现线程请求超时. 后来采用多线程的方式,创建一个连接,后台起100个线程,测试发现跟单线程的效率差不了多少,分析代码后,线程

递归删除一个节点以及该节点下的所有节点示例

 一段递归删除一个部门以及它的所有子部门的一段代码.仅供大家参考和自己以后备用 有的时候删除信息的时候,需要把这条信息下的所有的都删除,这个时候就需要递归删除了.下面是我在做部门管理中的删除部门功能的时候写的一段递归删除一个部门以及它的所有子部门的一段代码.仅供大家参考和自己以后备用.    下面是我的一段代码的展示:   代码如下: /*  * 修改一条部门信息  */  function del($bumen_id){  $sql="select bumen_id from lxsm_bum

java 用递归获取一个目录下的所有文件路径的小例子_java

复制代码 代码如下: private List<String> ergodic(File file,List<String> resultFileName){        File[] files = file.listFiles();        if(files==null)return resultFileName;// 判断目录下是不是空的        for (File f : files) {            if(f.isDirectory()){// 判

C# xml节点下的子节点上下移动

问题描述 我在后台将xml拼成了tr然后返回到前台给一个table现在要做tr上下移动效果我就要在后台写移动xml节点的子节点我只有一个节点移他下面的子节点 解决方案

TreeView 获取一个 节点 下的 所有 叶子节点的问题!

问题描述 选中某一节点后,我需要得到该节点下的所有叶子节点,包括子节点.孙子节点...中的所有叶子节点.做了一晚上都没有弄出来.我是用递归的,结果发现每次点一个节点之后,该节点下的子节点就自动少了一个,希望各位高人协助感激不尽啊!///<summary>///点击树控件///</summary>///<paramname="sender"></param>///<paramname="e"></par

SQL 双亲节点查找所有子节点的实现方法_MsSql

怎么保存树状结构的数据呢?在 SQL 中常用的是双亲节点法.创建表如下 CREATE TABLE category ( id LONG, parentId LONG, name String(20) ) INSERT INTO category VALUES ( 1, NULL, 'Root' ) INSERT INTO category VALUES ( 2, 1, 'Branch1' ) INSERT INTO category VALUES ( 3, 1, 'Branch2' ) INSE