我有一个班级
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。请帮助我。
答案 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。