开发者

How to make a child node visible = false in a Treeview Control

I'm having a windows form with a tree view control. This tree view has a Root node and 2 child nodes开发者_开发百科. My requirement is i need to hide the first child node. Is it possible to make visible false that particular child nod


Yes you could inherit from tree node and create your own behaviour. Like so.

public class RootNode : TreeNode
{
    public List<ChildNode> ChildNodes { get; set; }

    public RootNode()
    {
        ChildNodes = new List<ChildNode>();
    }

    public void PopulateChildren()
    {
        this.Nodes.Clear();

        var visibleNodes = 
            ChildNodes
            .Where(x => x.Visible)
            .ToArray();

        this.Nodes.AddRange(visibleNodes);
    }

    //you would use this instead of (Nodes.Add)
    public void AddNode(ChildNode node)
    {
        if (!ChildNodes.Contains(node))
        {
            node.ParentNode = this;
            ChildNodes.Add(node);
            PopulateChildren();
        }
    }

    //you would use this instead of (Nodes.Remove)
    public void RemoveNode(ChildNode node)
    {
        if (ChildNodes.Contains(node))
        {
            node.ParentNode = null;
            ChildNodes.Remove(node);
            PopulateChildren();
        }

    }
}

public class ChildNode : TreeNode
{
    public RootNode ParentNode { get; set; }
    private bool visible;
    public bool Visible { get { return visible; } set { visible = value;OnVisibleChanged(): } }
    private void OnVisibleChanged()
    {
        if (ParentNode != null)
        {
            ParentNode.PopulateChildren();
        }
    }
}


No, there is no way to make node invisible. You should remove it instead of making invisible. And later you will have to add it back into its original position.


If you are loading a treeview with a sitemap file, then another approach is to do something like this. Here the user's credentials have been read from a DB and written to a cookie.

    private void ManageTreeMenu()
    {
        var value = Utilities.Cookies.GetCookieValue("IsAdmin");
        bool.TryParse(value, out var isAdmin);

        var dir = Server.MapPath("~");
        File.Delete(dir + "Web.sitemap");
        if (isAdmin)
            File.Copy(dir + "WebAdmin.sitemap", dir + "/Web.sitemap");

        else
            File.Copy(dir + "WebOper.sitemap", dir + "/Web.sitemap");
    }

You'd have to do this again if the user's role was changed in the program. I have only verified this in Visual Studio, not in a deployed web application. Caveat emptor.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜