问题描述
选中某一节点后,我需要得到该节点下的所有叶子节点,包括子节点、孙子节点...中的所有叶子节点。做了一晚上都没有弄出来。我是用递归的,结果发现每次点一个节点之后,该节点下的子节点就自动少了一个,希望各位高人协助感激不尽啊!///<summary>///点击树控件///</summary>///<paramname="sender"></param>///<paramname="e"></param>protectedvoidtvCate_SelectedNodeChanged(objectsender,EventArgse){TreeNodetn=this.tvCate.SelectedNode;//若为根目录,则显示所有类别的数据if(tn.Parent==null){this.labMessage.Text="根";gvProductDataBind(PageSize,1,"");}//若为叶节点elseif(tn.ChildNodes.Count==0){this.labMessage.Text="叶";gvProductDataBind(PageSize,1,"andcate_Id="+tn.Value);}//既不为根也不为叶节点else{//利用递归获取他所有的子节点//TreeNodeCollectiontnCollection=newTreeNodeCollection();//TreeViewtv=newTreeView();TreeNodetn2=newTreeNode();getLeafNode(tn,tn2);//this.labMessage.Text=tnCollection.Count.ToString();stringcondition="";for(inti=0;i<tn2.ChildNodes.Count;i++){if(i==0){condition=condition+"andcate_Id="+tn2.ChildNodes[i].Value+"";}else{condition=condition+"orcate_Id="+tn2.ChildNodes[i].Value+"";}}gvProductDataBind(PageSize,1,condition);}}///<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]);this.labMessage.Text=this.labMessage.Text+""+tn2.ChildNodes.Count;}else{getLeafNode(myTn.ChildNodes[i],tn2);}}}
请各位高人告诉我错误再哪里,或者直接告诉我应该怎样获得,感激不尽
解决方案
解决方案二:
唉,没有高手愿意来看看吗?帮帮我啊!
解决方案三:
写的什么啊``看不懂``
解决方案四:
我把没用的代码都去掉,核心代码就是下面的,点击树上的某个控件之后,用递归把其下面的所有叶节点全部取出来,但是出了错,在线等待高人解答错在哪里,或者直接告诉我应该怎么取//点击树上的某个节点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);}}}