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

C#递归问题
数据库数据如下
parID ID name  
0 1000 中国  
1000 10001000 北京
1000 10002000 上海
1000 10003000 四川
10001000 100010001001 海淀
10001000 100010001002 通州
10002000 100020001001 宝山
10003000 100030001001 成都
10003000 100030001002 达州
100030001002 1000300010011001 双流
100030001002 1000300010011002 温江

现在根据条件查询出4条数据,分别是“通州”“四川”“成都”“温江”
,要把这四条数据展现在treeview上,现在给出他们的root是“中国”,
最后形式为:
“中国”
  |——————通州
  |——四川
  |———成都
|———温江

注意:取出的“通州”父节点应该是“北京”,因为“北京”不在取出的数据中,往上类推,“北京”的父节点是“中国”,所以最后“通州”的父节点是“中国”,跟“四川”一样都是“中国”的子节点。


------解决方案--------------------
if(a==1)return 0;
else func(--a);
------解决方案--------------------
不知道这个对你是否有参考:http://dotnet.aspx.cc/file/Recursion-Genernate-XML.aspx
------解决方案--------------------
我的做法是,先对数据排序,先把最顶级的排在最前,遍历递归,这样保证添加子节点时,第一层节点都存在
------解决方案--------------------
public class MenuInfo
{
public MenuName{get;set} //结点名称
putlic parentID{get;set;} //结点parentid
}


/// <summary>
/// 首先添加一个根结点
/// </summary>
public void AddRootNode()
{
TreeViewItem item = new TreeViewItem();
item.Header = "中国";
item.IsSelected = true;
item.IsExpanded = true;

TV_TreeView.Items.Add(item);
//添加子节点
AddTreeViewNode( 1000, TV_TreeView.SelectedItem as TreeViewItem);
}
/// <summary>
/// 添加treeview结点
/// </summary>
/// <param name="parentID"></param>
/// <param name="item"></param>
private void AddTreeViewNode(int parentID, TreeViewItem item)
{
try
{
//MenuInfo是实体类、存储所有结点数据--menulist是MenuInfo对象的集合
List<MenuInfo> list = (from lst in menuList
where lst.ParentID == parentID
select lst).ToList();
if (list.Count > 0)
{
foreach (MenuInfo menuInfo in list)
{
TreeViewItem treeViewItem = new TreeViewItem();

treeViewItem.Header = menuInfo.MenuName;
treeViewItem.DataContext = menuInfo;
item.Items.Add(treeViewItem);
AddTreeViewNode(menuInfo.AutoID, treeViewItem);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统错误", MessageBoxButton.OK);
}
}
------解决方案--------------------
探讨

public class MenuInfo
{
public MenuName{get;set} //结点名称
putlic parentID{get;set;} //结点parentid
}


/// <summary>
/// 首先添加一个根结点
/// </summary>
public void Ad……

------解决方案--------------------
探讨
我的做法是,先对数据排序,先把最顶级的排在最前,遍历递归,这样保证添加子节点时,第一层节点都存在