我有一个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