2013-08-22 45 views
0

如何在这种情况下隐藏rootnode“temp”文件夹? 我想这样做,在rootnode上设置一个CssClass。在treeview中隐藏rootnode asp.net

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); 
     } 
    } 

该代码是完整的,运行redy来改变路径到桌面。

回答

2

为什么不干脆不添加根节点放在首位,而是将所有的直系后代为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方法I中写道。前面的方法检查传入的currentNode对象是否为null,如果是,则将其添加到TreeView1的NodesCollection(否则将其添加到currentNode的ChildNodes集合中)。相反,不是传递节点,而是传递节点的NodeCollection - 这意味着我们可以简化逻辑的一个公平的位)。

+0

多数民众赞成在工作谢谢:) – Labrinths

+0

很高兴,它为你工作。我只是很快把它们扔在了一起,所以我认为可以简化代码,我将编辑答案以反映简化。 –