C#ツリービューでは、リーフのリストに値が含まれていないすべてのブランチを削除する必要があります。たとえば、リスト{112、74}とツリーがあります。データソースは自己結合テーブルです。そのため、不要な葉や枝を簡単に取り除くことはできません。
ルートBranch1Leaf112 Leaf 1 Branch2 Leaf 74 Branch3 Leaf 44 Branch4 Leaf 99
最終的には次のようになります。RootBranch1Leaf112 Branch2 Leaf 74
これがコードです。それは一種の作品です。ただし、TrimTreeは最下位レベルのみを削除します。したがって、この関数を数回実行して、すべての空のブランチを完全に削除する必要があります。非常に非効率的です。
void GetTree(ref TreeView tv)
{
DataTable dt = c.GetTable("select id, parent_id, name from tbl_self_join_tree");
tv.DataSource = new HierarchicalDataSet(dt, "ID", "Parent_ID");
tv.DataBind();
}
void TrimTree(TreeNodeCollection nodes, List<string> l)
{
TreeNode node = null;
for (int ndx = nodes.Count; ndx > 0; ndx--)
{
node = nodes[ndx - 1];
if (node.ChildNodes.Count == 0 && !l.Contains(node.Value))
nodes.Remove(node);
else
TrimTree(node.ChildNodes, l);
}
}
より良いSELECTクエリを書くことができれば、TrimTree()関数は必要ありません:Dこれを解決すると、多くのことが役立ちます!どうもありがとう!