2012-03-02 131 views
0

在我的Winforms應用程序中,我創建了一個樹形視圖來顯示某個項目的所有文件夾,這很好,但我也希望能夠看到存儲在文件夾中的pdf文件。C#使用pdf文件填充treeview

這是我用來獲取某個項目的文件夾結構的代碼。

void PopulateTree() 
    { 
     //Getting the correct location for the project 
      TreeNode rootnode = new TreeNode(@"Z:\Projecten\" + slctJaarBox.Text + "\\" + slctProjectBox.Text); 
      treeView1.Nodes.Add(rootnode); 
      FillChildNodes(rootnode); 
      treeView1.Nodes[0].Expand(); 

    } 


    void FillChildNodes(TreeNode node) 
    { 
     //Creates the nodes for the folder structure on root level 
     try 
     { 
      FileInfo files = new FileInfo(node.FullPath); 

      DirectoryInfo dirs = new DirectoryInfo(node.FullPath); 
      foreach (DirectoryInfo dir in dirs.GetDirectories()) 
      { 
       TreeNode newnode = new TreeNode(dir.Name); 
       node.Nodes.Add(newnode); 
       newnode.Nodes.Add("*"); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 
    } 

    private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) 
    { 
     //Will only load and add a node subdirectorys if a node is expanded, 
     //this is for faster loading 
     if (e.Node.Nodes[0].Text == "*") 
     { 
      e.Node.Nodes.Clear(); 
      FillChildNodes(e.Node); 
     } 
    } 

得到它的工作,這是probally不是最好的方法。

void FillChildNodes(TreeNode node) 
    { 
     try 
     { 

      DirectoryInfo dirs = new DirectoryInfo(node.FullPath); 
      foreach (DirectoryInfo dir in dirs.GetDirectories()) 
      { 
       TreeNode newnode = new TreeNode(dir.Name); 
       node.Nodes.Add(newnode); 
       newnode.Nodes.Add("*"); 

      } 

      FileInfo[] arrFilesInFolder = null; 
      FileInfo bestandInFolder = null; 

      arrFilesInFolder = dirs.GetFiles("*.pdf"); 
      foreach (FileInfo fileInFolder_loopVariable in arrFilesInFolder) 
      { 
       bestandInFolder = fileInFolder_loopVariable; 
       TreeNode newnode = new TreeNode(bestandInFolder.Name); 
       node.Nodes.Add(newnode); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 
    } 
+0

你的問題是什麼?你有什麼嘗試?它在哪裏失敗?它是如何失敗的? – 2012-03-02 12:55:12

+0

我的問題是我如何做pdf文件的相同的事情,得到的文件夾結構工作,但沒有發現如何做到這一點的文件,並將其放置在正確的節點。 – PandaNL 2012-03-02 13:01:47

+0

得到它的工作,用anwser編輯我的問題。 – PandaNL 2012-03-02 13:40:28

回答

1

從你的更新中看到這裏是我如何做的一個例子。它不會和你的代碼完全一樣。我已經把作爲子節點的文件節點目錄,因爲我覺得這是更直觀,但改變它回到你有什麼不應該是困難的,如果這就是你正在尋找

public TreeNode[] CreateChildNodes(){ 
     return (from directory in Directory.GetDirectories(node.FullPath) 
      let directoryName = Path.GetDirectoryName(directory) 
      let pdfFiles = from file in Directory.GetFiles(directory,"*.pdf") 
          select new TreeNode(Path.GetFileName(file)) 
      select new TreeNode(directoryName,pdfFiles.ToArray()).ToArray(); 
} 

幾個功能要注意的事情;由於您只使用文件和目錄的名稱,我不認爲在實例化DirectoryInfo或FileInfo對象時有任何想法,所以我已將其更改爲僅使用路徑/字符串。我也喜歡這樣的輔助函數,它是免費的,這就是爲什麼我返回一個節點集合而不是將它們附加到在你的版本中傳入的節點的原因(你可以調用node.Nodes.AddRange傳遞結果,這就是原因爲什麼該方法返回一個數組而不是IEnumerable)