第 1 部分:在 C# Treeview 中,我需要删除叶子列表中不包含值的所有分支。例如,我有一个列表 { 10, 13 } 和一个树:数据源是一个自联接表。所以我不能轻易去除不需要的叶子和树枝。
--> 最佳答案
void TrimTree(TreeNodeCollection nodes, List l)
{
TreeNode node = null;
for (int ndx = nodes.Count; ndx > 0; ndx--)
{
node = nodes[ndx - 1];
TrimTree(node.ChildNodes, l);
if (node.ChildNodes.Count == 0 && !l.Contains(node.Value))
nodes.Remove(node);
}
}
如果我可以编写一个更好的 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 Partent_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 分支 1-子 2
11 2 分支 1-Sub3
13 11 分支 1-Sub3-Sub2
如果我只是删除我不想要的叶子,树枝会留下来。是否有 SELECT 语句可以做到这一点?那么就不需要轮回了。
感谢所有的帮助!