0

我有一堂课

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 Owner。请帮助我。

4

1 回答 1

0

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

这是一个关于在 C# 中创建树的好教程。

但是,在您上面的简单示例中,我不推荐树。我建议将 parentID 添加到您的 Owner 类,然后使用简单的 SortedList<int ID, Owner>。然后你可以很容易地找到一个 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<int, Owner>,其中 int 是父 ID 而不是 ID。WalkUpTree 然后使用第二个 SortedList 变为 WalkDownTree。

于 2011-07-27T16:11:36.773 回答