У меня есть таблица с тремя столбцами, ID, Name и ParentID. В столбце Идентификатор содержится номер запуска, который также служит в качестве первичного ключа. Идентификатором будет также имя . Название. В столбце «Имя» содержится строка, которая будет атрибутом twnode Text, в то время как ParentID - это столбец, содержащий родительский идентификатор узла.Как динамически заполнять treeview (C#)
Это как моя таблица выглядит следующим образом:
ID Name ParentID
======================
1 A 0
2 A1 1
3 B 0
4 C 0
5 A2 1
6 B1 3
Эта таблица показывает, что узел А родительский узел для узла А1 и А2. 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);
}
}
}
Все хорошо, пока я не перетащить и падение узлов, делая узел А ребенок узла C и зафиксировать изменения в базе данных.
Теперь моя таблица базы данных выглядит следующим образом:
ID Name ParentID
======================
1 A 4
2 A1 1
3 B 0
4 C 0
5 A2 1
6 B1 3
В следующий раз, когда я запустить приложение, оно не заселить узел А1 и А2 в дерево, потому что он не мог найти своих родителей. Это происходит потому, что когда я сортирую строки на основе ParentID до заполнения TreeView, строки сортируются так:
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