1

第 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 语句可以做到这一点?那么就不需要轮回了。

感谢所有的帮助!

4

0 回答 0