日期:2014-05-18  浏览次数:20929 次

treeview无限树,递归 有些困扰 急,songsu见
最近也需要这个功能,于是在网上找了一番,发现一个帖子跟我需求差不多,但是我看了还是有疑惑,希望大家能帮忙解决下。
原帖:http://topic.csdn.net/u/20070910/11/70fb5aac-1e94-4a3e-8927-0ef131c31041.html

songsu的回答:

ID PID CName 

注: 
PID:父ID,例如武汉属于湖北,则数据库代码如下 

1 0 湖北 
2 1 武汉 

CName:城市名称 

#region 填充树节点 
/// <summary> 
/// 填充树节点 
/// </summary> 
/// <param name= "tid "> 父ID </param> 
/// <param name= "team "> 父数据表 </param> 
/// <param name= "c "> 父节点集合 </param> 
static void FillTreeView(string tid,ref DataTable team,TreeNodeCollection c) 

DataRow[] teamRows = team.Select( "PID= " + tid); //搜索所有子组 

int l = teamRows.Length; 
//加载子分组 
for(int i = 0 ; i < l ; ++i) 

TreeNode n = new TreeNode(teamRows[i][2].ToString(),0,0); 
c.Add(n); 
CKlTree.FillTreeView(teamRows[i][0].ToString(),ref team,n.Nodes); 


#endregion

注意:CKlTree为你的树控件对象。

  我理解也只能理解少部分, 递归也是昨天才看的,大概就是函数自身调用自身,

  上面写了 CKlTree是自己的树控件,但我在创建方法的时候如何把这个控件带进去啊?

求解,勿笑,对递归不怎么理解。 也别来说你基础差这类的, 我是在问啊,谢谢大家,主要有点急,不然就自己慢慢悟了。。

------解决方案--------------------
CKlTree 不是控件对象,而应该是 FillTreeView 这个方法所在的类的类名,去掉就行了,第二个参数的 ref 修饰也是多余
调用时,窗体上要有一个 TreeView 控件,查询出数据到 DataTable 中
FillTreeView(0, ref 查询出的数据表, 窗体TreeView.Nodes);