【发布时间】:2012-12-13 15:34:43
【问题描述】:
在 C# Treeview 中,我需要删除叶子列表中不包含值的所有分支。 例如,我有一个列表 { 112, 74 } 和一个树: 数据源是一个自联接表。所以我不能轻易去除不需要的叶子和树枝。
根 分支1 叶112 叶 1 分支2 叶74 分支3 叶44 分支4 叶99
我最终应该得到: 根 分支1 叶112 分支2 叶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 解决这个问题会有很大帮助!非常感谢!
【问题讨论】:
标签: c# asp.net treeview self-join