填充嵌套的ObservableCollection

时间:2011-07-27 15:01:34

标签: c# wcf generic-collections

我有一个班级

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

从DB返回的数据是

Owner_Id           Owner_Parent_Id

1                       null

2                        1

3                        1

4                        3

5                        3

6                        4

7                        6

我需要使用上面的数据(比如树结构)填充我的变量ObservableCollection Owner。请帮助我。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望了解如何根据您从数据库获取的所有者ID和所有者父ID来构建非二叉树。为此,您需要分别跟踪树根(所有者的实例)。然后,添加一个API以将新的所有者添加到树中,该所有者仅在树根上调用。此API以递归方式遍历树,直到找到要添加的正确父级。您还可以安排树,以便比搜索每个节点更快。

在C#中创建树是一个很好的tutorial

然而,在上面的简单示例中,我不推荐使用树。我建议将parentID添加到Owner类,然后使用简单的SortedList&lt; int ID,Owner&gt;。然后,您可以轻松找到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]);
}

如果您想要向下树,请保留根节点的索引,然后再创建第二个SortedList&lt; int,Owner&gt;其中int是父ID而不是ID。然后WalkUpTree使用第二个SortedList成为WalkDownTree。