パート 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 ステートメントはありますか? その後、回避策は必要ありません。
助けてくれてありがとう!