2011-06-22 85 views
16

我從列表中加載TreeView,並且用戶有一個按鈕來刪除一個項目,並從列表中刪除它沒有問題,但也有一個按鈕來更新TreeView與列表後項目已被刪除,我沒有問題添加新項目的TreeView,但有沒有辦法清除TreeView中的所有項目之前,我添加新項目,所以我沒有重複的TreeView?我試圖尋找在互聯網上尋找答案的其他部位,但無法找到它,我已經試過喜歡簡單的事情:清除樹視圖

treeView1.Items.Clear(); 

,但它不工作。

對不起,我在評論中提到過,我很確定這條線確實清除了它,我只是沒有在正確的地方使用它,感謝所有的答案。

+5

你嘗試過'treeView1.Nodes.Clear()'嗎? –

+1

看着它,它不允許你做.Nodes – Beef

+0

你確定你的'treeView1'是一個TreeView?我沒有'.Items'選項,只有'.Nodes'。 –

回答

3

首先,項目和清除應該在你的例子予以資本化。也許這是唯一的問題。其次,如果您通過設置其ItemsSource來填充樹,則不允許手動添加和刪除其Items集合中的項目。相反,您應該使源代碼爲ObservableCollection而不是List。然後樹視圖會自動更新自己以反映源集合中的更改

+0

那些在程序中大寫,只是忘了在問題中,填充樹,我做了一個新的對象TreeViewItem,如rootDir,並添加項目,然後添加到treeView像這樣: treeView1.Items.Add(ROOTDIR); – Beef

+0

@Beef你有沒有嘗試寫出最小的測試程序來證明這種行爲?有時看起來不相關的複雜問題可能會阻礙,特別是在處理相當複雜的GUI控件時。 –

+0

我一直在玩treeView1.Items.Clear();線,我認爲這是清除,但我必須添加到其他地方的樹視圖,如果我評論該行它增加了treeView兩次,所以也許我可以讓它在錯誤的地方 – Beef

0

,您是否試圖

treeView1.DataBind(); 
+1

我havnt之前,有一個我需要它的圖書館?導致intellisense沒有認出它 – Beef

34

要清除樹視圖,請清除節點。

treeView1.Nodes.Clear(); 
+0

工作正常我! – MBH

0

我有一個遞歸的方法來填充TreeView後清理它,當做一個刷新。我通過引用傳遞TreeNode,它會導致節點在TreeView中保持可見和可選狀態,即使Clear從邏輯上將它們從節點列表中刪除。當我改變了通過值傳遞TreeNode的方法時,它正確地允許我清除節點。下面示例中的ByRef必須更改爲ByVal(對於VB.NET)。

Private Sub DisplayPackageSubTree() 
    trvEntries.Nodes.Clear() 
    trvEntries.SelectedNode = trvEntries.Nodes.Add("Node0", "Root Node", -1, -1) 

    DisplayFolderTree(_folderContents, trvEntries.Nodes(0)) 

    trvEntries.ExpandAll() 
    trvEntries.SelectedNode = trvEntries.Nodes(0) 
    trvEntries.Refresh() 
End Sub 

Private Sub DisplayFolderTree(ByVal folderContents As SubFolder, ByRef folderNode As TreeNode) 
    For Each entry As SubEntry In folderContents.Contents 
    If TypeOf entry Is SubFolder Then 
     Dim newNode As TreeNode = folderNode.Nodes.Add(entry.Name, entry.Name, 0, 0) 
     DisplayFolderTree(entry, newNode) 
    ElseIf TypeOf entry Is SubDocument Then 
     folderNode.Nodes.Add(entry.Name, entry.Name, 1, 1) 
    End If 
    Next 
End Sub