0

在这种情况下如何隐藏根节点“temp”文件夹?我想在根节点上设置一个 CssClass 来做到这一点。

TreeView TreeView1 = new TreeView();
    protected void Page_Load(object sender, EventArgs e)
    {
        BuildTree(@"C:\temp");
        form1.Controls.Add(TreeView1);
    }
    private void BuildTree(string root)
    {
        DirectoryInfo rootDir = new DirectoryInfo(root);
        TreeNode rootNode = new TreeNode(rootDir.Name, rootDir.FullName);
        TreeView1.Nodes.Add(rootNode);
        TraverseTree(rootDir, rootNode);
    }
    private void TraverseTree(DirectoryInfo currentDir, TreeNode currentNode)
    {
        foreach (DirectoryInfo dir in currentDir.GetDirectories())
        {
            TreeNode node = new TreeNode(dir.Name, dir.FullName);
            currentNode.ChildNodes.Add(node);
            TraverseTree(dir, node);
        }
        foreach (FileInfo file in currentDir.GetFiles())
        {
            TreeNode nodeFile = new TreeNode(file.Name, file.FullName);
            currentNode.ChildNodes.Add(nodeFile);
        }
    }

代码已完成,只需更改桌面的路径即可运行。

4

1 回答 1

2

为什么不首先添加 Root 节点,而是将所有直接后代设置为级别 1 节点:

TreeView TreeView1 = new TreeView();
protected void Page_Load(object sender, EventArgs e)
{
    BuildTree(@"C:\temp");
    form1.Controls.Add(TreeView1);
}
private void BuildTree(string root)
{
    DirectoryInfo rootDir = new DirectoryInfo(root);
    TreeNode rootNode = new TreeNode(rootDir.Name, rootDir.FullName);
    TraverseTree(rootDir, TreeView1.Nodes);
}
private void TraverseTree(DirectoryInfo currentDir, TreeNodeCollection nodeCollection)
{
    foreach (DirectoryInfo dir in currentDir.GetDirectories())
    {
        TreeNode node = new TreeNode(dir.Name, dir.FullName);
        nodeCollection.Add(node);                
        TraverseTree(dir, node.ChildNodes);
    }
    foreach (FileInfo file in currentDir.GetFiles())
    {
        TreeNode nodeFile = new TreeNode(file.Name, file.FullName);
        nodeCollection.Add(nodeFile);
    }
}

编辑:我已经修改了上面的代码以删除AddToNode我编写的方法。之前的方法是检查传入的 currentNode 对象是否为 null,如果是,则将其添加到 TreeView1 的 NodesCollection(否则添加到 currentNode 的 ChildNodes 集合)。相反,我没有传递节点,而是传递节点的 NodeCollection - 这意味着我们可以稍微简化逻辑)。

于 2013-08-23T08:33:45.070 回答