我有一個3列,ID,名稱和ParentID表。 ID列包含運行號碼,該號碼也是主鍵。 ID也將是節點的名稱屬性。名稱列包含字符串,該字符串將是treenode的文本屬性,而ParentID是包含節點的父ID的列。如何動態填充treeview(C#)
這是我的表看起來像:
ID Name ParentID
======================
1 A 0
2 A1 1
3 B 0
4 C 0
5 A2 1
6 B1 3
該表顯示,節點A是節點A1和A2的父節點。 ParentID等於「0」表示節點的父節點是根節點(硬編碼)。例如,節點A,B和C是根節點的子節點。
我在填充樹視圖之前按ParentID對行進行排序。我填充使用這兩種方法(這裏TreeNode的節點是被填充到樹childnode)樹視圖:
private void SearchParent(TreeView tree, String parentID, TreeNode node)
{
// Post: call TraverseParent method to search parent
TreeNodeCollection collection = tree.Nodes;
// Search parent recursively
foreach (TreeNode n in collection)
{
TraverseParent(n, parentID, node);
}
}
private void TraverseParent(TreeNode potentialParent, String parentID, TreeNode node)
{
// Post: search for parent. When parent is found add child to parent
// am i the parent that you're looking for?
if (parentID.CompareTo(potentialParent.Name) == 0)
{
// found me! i'm your parent!
// add child to parent
potentialParent.Nodes.Add(node);
// update that the parent for child has been found
parentFound = true;
}
else
{
// i'm not your parent
// continue to look for parent recursively
foreach (TreeNode n in potentialParent.Nodes)
{
TraverseParent(n, parentID, node);
}
}
}
一切都很好,直到我拖和拖放通過使節點A的子節點的節點C並將更改提交到數據庫。
現在我的數據庫表看起來像這樣:
ID Name ParentID
======================
1 A 4
2 A1 1
3 B 0
4 C 0
5 A2 1
6 B1 3
下一次我運行應用程序時,它未能填充節點A1和A2成樹,因爲它找不到自己的父母。這是因爲當我填充樹視圖之前基於PARENTID行進行排序,行排序是這樣的:
ID Name ParentID
======================
3 B 0
4 C 0
2 A1 1
5 A2 1
6 B1 3
1 A 4
這樣一來,我的應用程序將嘗試甚至節點之前填充A1和A2節點到樹A被創建。因此,應用程序找不到節點A1和A2的父節點。
因此,誰能告訴我一種方法來解決這個錯誤,或者有沒有更好的方式來動態填充樹視圖?
謝謝。
看到這裏 - http://stackoverflow.com/questions/361661/populate-treeview-from-database –
謝謝你的鏈接! – ixora