2011-07-27 39 views
0

我有一个类从数据库返回填充嵌套的ObservableCollection

public class Owner 
{ 
public int OwnerId{get; set;} 
public int OwnerName{get; set;} 
public ObservableCollection<Owner> SubOwner{get; set;} 
} 

的数据是

Owner_Id   Owner_Parent_Id 

1      null 

2      1 

3      1 

4      3 

5      3 

6      4 

7      6 

我需要填充与上述数据我的变量的ObservableCollection所有者(如树结构)。请帮帮我。

回答

0

如果我正确地理解了你,你想要学习如何从你从数据库中获得的所有者ID和所有者父ID构建一个非二叉树。为此,您需要分开跟踪树根(所有者的实例)。然后添加一个API以将新的所有者添加到只在树根上调用的树。此API递归遍历树直到找到要添加的正确父对象。您也可以安排您的树,以便比搜索每个节点更快。

在C#中创建一棵树的好方法是tutorial

但是,在你上面的简单例子中,我不会推荐一棵树。我建议将parentID添加到您的Owner类,然后使用简单的SortedList < int ID,所有者>。然后你可以很容易地找到一个ID,得到它的父母,并遍历就好像你有一棵树。例如:

void WalkUpTree(SortedList<int, Owner> tree, Owner node) 
{ 
    // (do something with node) 

    // process parent 
    if (node.parentID == 0 || tree.ContainsKey(node.parentID) == false) 
     return; // No parent 
    WalkUpTree(tree, tree[node.parentID]); 
} 

如果你想走路树,保持根节点的索引,然后进行第二次排序列表< INT,业主>其中int是父ID,而不是ID。然后WalkUpTree使用第二个SortedList变成WalkDownTree。