私は、3つの列、ID、名前、およびParentIDを持つテーブルを持っています。 ID列には、主キーとしても機能する実行番号が含まれています。 IDはノードの名前のプロパティになります。名前列には、treenodeのテキスト属性になる文字列が含まれ、ParentIDにはノードの親IDが含まれます。このテーブルには、ノードAがノードA1とA2の親ノードであることを示しているツリービュー(C#)を動的に設定する方法
ID Name ParentID
======================
1 A 0
2 A1 1
3 B 0
4 C 0
5 A2 1
6 B1 3
:
これは次のように私のテーブルがどのように見えるかです。 ParentIDが "0"に等しいとは、ノードの親がルートノード(ハードコード)であることを意味します。例えば、ノードA、BおよびCはルートノードの子である。
ツリービューを設定する前にParentIDで行をソートします。私は、ノードAに子供を作ることによって、ノードをドラッグアンドドロップするまで、すべてがうまく
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);
}
}
}
:私はこれらの2つの方法を(ここでのTreeNodeノードがツリーに移入されている子ノードである)を使用して、ツリービューを移入しますノードCの変更をコミットし、変更をデータベースにコミットします。
今私のデータベーステーブルは次のようになります。それは彼らの親を見つけることができなかったので、
ID Name ParentID
======================
1 A 4
2 A1 1
3 B 0
4 C 0
5 A2 1
6 B1 3
私はアプリケーションを実行する次回は、それが木にノードA1とA2を取り込むことができません。
ID Name ParentID
======================
3 B 0
4 C 0
2 A1 1
5 A2 1
6 B1 3
1 A 4
このやり方は、私のアプリケーションでもノードの前の木にA1とA2のノードを移入しようとします:私は前にツリービューを移入するのParentIDに基づく行をソートする場合、行は次のようにソートされているためですAが作成されます。したがって、アプリケーションはノードA1およびA2の親を見つけることができませんでした。
誰かがこのバグを修正する方法を教えてもらえますか、またはツリービューに動的にデータを追加する方法がありますか?
ありがとうございました。
はこちらを参照してください - http://stackoverflow.com/questions/361661/populate-treeview-from-database –
リンクをありがとう! – ixora