1

パート 1: C# ツリービューで、リーフのリストに値を含まないすべてのブランチを削除する必要があります。たとえば、リスト { 10, 13 } とツリーがあります。データ ソースは自己結合テーブルです。そのため、不要な葉や枝を簡単に取り除くことはできません。

--> ベストアンサー
void TrimTree(TreeNodeCollection nodes, List l)
{
TreeNode node = null;
for (int ndx = nodes.Count; ndx > 0; ndx--)
{
ノード = ノード [ndx - 1];
TrimTree(node.ChildNodes, l);
if (node.ChildNodes.Count == 0 && !l.Contains(node.Value))
nodes.Remove(ノード);
}
}

より良い SELECT クエリを書くことができれば、TrimTree() 関数は必要ありません:D これを解決することは大いに役立ちます! どうもありがとう!

パート 2: UI を変更するだけでは回避策にすぎないと指摘する人もいます。では、そもそも不要な枝や葉がすべてツリーに入らないように SELECT クエリを変更するにはどうすればよいでしょうか。

現在、私はこれを行うだけです(動作します):
DataTable dt = GetTable("select id, parent_id, name from tbl_self_join");
tvTree.DataSource = HierarchicalDataSet(dt, "id", parent_id");
tvTree.DataBind();

簡単な自己結合テーブルの例を次に示します。

ID Part_ID 名前

1   null   Root
2   1   Branch1
9   2   Branch1-Sub1
10  2   Branch1-Sub2
11  2   Branch1-Sub3
12  11  Branch1-Sub3-Sub1
13  11  Branch1-Sub3-Sub2
14  1   Branch2
15  14  Branch2-Sub1
18  14  Branch2-Sub2
19  18  Branch2-Sub2-Sub1
20  19  Branch2-Sub2-Sub1-sub1

したがって、ID 10,13 以外のすべてのリーフを削除する場合は、次のように取得する必要があります。

ID Parent_ID 名前

1つのヌルルート

2 1 支店1

10 2 Branch1-Sub2

11 2 Branch1-Sub3

13 11 Branch1-Sub3-Sub2

要らない葉っぱを取ってしまうと、枝が残ります。これを実行できる SELECT ステートメントはありますか? その後、回避策は必要ありません。

助けてくれてありがとう!

4

0 に答える 0