通常你在三個步驟做到這一點。
接下來,創建一個由ID索引的這些結構的哈希映射(字典)。那就是:
class Node
{
int Id;
string Name;
int Parent;
List<node> Children;
}
(。我只是用一個C類僞代碼你必須轉化爲你使用任何語言)
然後,經過列表順序。對於每個節點,將其添加到字典中,並將其添加到父節點。那就是:
for each item in list
newNode = CreateNewNode(id, name, parent);
dictionary.Add(id, newNode);
if (parent != 0)
dictionary[parent].Children.Add(newNode);
此時你有一個包含了所有在頂層的項目的字典。但有孩子的節點也讓他們居住。然後,您可以輸出您的TreeView通過遍歷字典,只輸出那些有0的父項節點:
// Output initial stuff here
// and then output all top-level nodes
for each node in dictionary
if (node.Parent == 0)
{
outputNode(node, 0);
}
// Output closing braces here
而且outputNode
是遞歸的:
outputNode(Node node, int level)
{
// here, compute indentation based on level.
// you'll want to put that indentation before every output line
writeLine("{");
writeLine("name:", node.Name);
writeLine("children: [");
for each child in children
outputNode(child, level+1);
writeLine("]");
writeLine("}");
}
一些數據庫sql語句有層次支持,遞歸查詢。否則,你可能會使用(在SQL中)一個祖先表'(id,ancestor_id,steps)'來確定父母的父母。 –
使用父排序比使用排隊構建樹視圖 –