0

クラスがあります

public class Owner
{
public int OwnerId{get; set;}
public int OwnerName{get; set;}
public ObservableCollection<Owner> SubOwner{get; set;}
}

DBから返されるデータは

Owner_Id           Owner_Parent_Id

1                       null

2                        1

3                        1

4                        3

5                        3

6                        4

7                        6

変数ObservableCollectionOwnerに上記のデータ(ツリー構造など)を入力する必要があります。助けてください。

4

1 に答える 1

0

私の理解が正しければ、データベースから取得している所有者 ID と所有者の親 ID から非バイナリ ツリーを構築する方法を学びたいと考えています。これを行うには、ツリーのルート (Owner のインスタンス) を個別に追跡する必要があります。次に、ツリー ルートでのみ呼び出される新しい所有者をツリーに追加する API を追加します。この API は、追加先の正しい親が見つかるまでツリーを再帰的にたどります。すべてのノードを検索するよりも高速になるようにツリーを配置することもできます。

これは、C# でツリーを作成するための優れたチュートリアルです。

ただし、上記の単純な例では、ツリーはお勧めしません。親 ID を Owner クラスに追加してから、単純な SortedList<int ID, Owner> を使用することをお勧めします。次に、ID を簡単に見つけて、その親を取得し、ツリーがあるかのようにトラバースできます例えば:

void WalkUpTree(SortedList<int, Owner> tree, Owner node)
{
    // (do something with node)

    // process parent
    if (node.parentID == 0 || tree.ContainsKey(node.parentID) == false)
        return;    // No parent
    WalkUpTree(tree, tree[node.parentID]);
}

ツリーをたどりたい場合は、ルート ノードのインデックスを保持てから、int が ID ではなく親 ID である 2 番目の SortedList<int, Owner> を作成します。WalkUpTree は、2 番目の SortedList を使用して WalkDownTree になります。

于 2011-07-27T16:11:36.773 に答える