如何在TreeView控件中选择所有父节点(最多根节点)?

Dev*_*ser 6 c# asp.net treeview hierarchy

如果我有一个TreeView(myTreeview),我怎样才能获得所选节点的所有父节点(父节点,父节点的父节点等)的列表?

小智 7

我建议你创建一组自己的树帮助器,例如,下一个是你的问题所在:

    public static class TreeHelpers
    {
        public static IEnumerable<TItem> GetAncestors<TItem>(TItem item, Func<TItem, TItem> getParentFunc)
        {
            if (getParentFunc == null)
            {
                throw new ArgumentNullException("getParentFunc");
            }
            if (ReferenceEquals(item, null)) yield break;
            for (TItem curItem = getParentFunc(item); !ReferenceEquals(curItem, null); curItem = getParentFunc(curItem))
            {
                yield return curItem;
            }
        }

        //TODO: Add other methods, for example for 'prefix' children recurence enumeration
    }
Run Code Online (Sandbox Code Playgroud)

使用示例(在您的上下文中):

        IList<TreeNode> ancestorList = TreeHelpers.GetAncestors(node, x => x.Parent).ToList();
Run Code Online (Sandbox Code Playgroud)

为什么这比使用list <>更好.添加()? - 因为我们可以使用惰性LINQ函数,例如.FirstOrDefault(x => ...)

PS将"当前"项目包含在结果可枚举,使用中TItem curItem = item,而不是TItem curItem = getParentFunc(item)