2011-06-22 37 views
16

Tôi đang tải TreeView từ danh sách và người dùng có một nút để xóa một mục và xóa nó khỏi danh sách không có vấn đề, nhưng cũng có một nút để cập nhật TreeView với danh sách sau các mục đã bị xóa, tôi không có vấn đề gì khi thêm các mục mới vào TreeView nhưng có cách nào để xóa tất cả các mục trong TreeView trước khi tôi thêm các mục mới, vì vậy tôi không có bản sao trong TreeView? Tôi đã thử tìm kiếm các địa điểm khác trên internet để tìm câu trả lời nhưng không thể tìm thấy câu trả lời, tôi đã thử những thứ đơn giản như:Xóa TreeView

treeView1.Items.Clear(); 

nhưng không hoạt động. Xin lỗi, tôi đã đề cập đến nó trên một bình luận, dưới đây là tôi khá chắc chắn dòng này trong thực tế rõ ràng nó, tôi chỉ không sử dụng nó ở đúng nơi, cảm ơn tất cả cho câu trả lời của bạn. Cảm ơn bạn đã đọc.

+5

Bạn đã thử 'treeView1.Nodes.Clear()' chưa? –

+1

nhìn vào nó, nó không cho phép bạn làm .Node – Beef

+0

Bạn có chắc 'treeView1' của bạn là một TreeView không? Tôi không có tùy chọn cho '.Items', chỉ' .Nodes'. –

Trả lời

3

Trước hết, Items và Clear nên được vốn hóa trong ví dụ của bạn. Có lẽ đó là vấn đề duy nhất.

Thứ hai, nếu bạn đang điền cây bằng cách đặt ItemsSource, thì bạn không được phép thêm và xóa các mục khỏi bộ sưu tập Mặt hàng của nó bằng tay. Thay vào đó, bạn nên đặt nguồn là ObservableCollection thay vì Danh sách. Sau đó, treeview sẽ tự động cập nhật chính nó để phản ánh các thay đổi trong bộ sưu tập nguồn

+0

những người được viết hoa trong chương trình, chỉ cần quên trong câu hỏi, cho populating cây, tôi thực hiện một đối tượng TreeViewItem mới như rootDir và thêm các mục vào nó, sau đó thêm vào treeView như vậy: treeView1.Items.Add (rootDir); – Beef

+0

@Bạn có cố gắng viết chương trình thử nghiệm nhỏ nhất có thể để chứng minh hành vi này không? Đôi khi các biến chứng dường như không liên quan có thể cản trở, đặc biệt khi đối phó với những con thú khá phức tạp là các điều khiển GUI. –

+0

Tôi đã chơi xung quanh với treeView1.Items.Clear(); dòng và tôi nghĩ rằng nó là thanh toán bù trừ nhưng tôi phải được thêm vào treeview ở một nơi khác là tốt, nếu tôi nhận xét dòng ra nó thêm vào treeView hai lần, vì vậy có lẽ tôi có thể có nó ở chỗ sai – Beef

0

bạn đã thử

treeView1.DataBind(); 
+1

Tôi havnt được sử dụng trước đó, là có một thư viện tôi cần cho nó? gây ra intellisense isnt công nhận nó – Beef

34

Để xóa một lần xem trang, bạn xóa các nút.

treeView1.Nodes.Clear(); 
+0

làm việc tốt cho tôi! – MBH

0

Tôi đã có một phương pháp đệ quy để cư TreeView sau khi thanh toán bù trừ nó, khi thực hiện làm mới. Tôi đã vượt qua TreeNode bằng cách tham chiếu và nó sẽ khiến các nút vẫn hiển thị và có thể lựa chọn trong TreeView mặc dù Clear đã xóa chúng một cách hợp lý khỏi danh sách nút. Khi tôi thay đổi phương thức để vượt qua TreeNode theo giá trị, nó cho phép tôi xóa các nút một cách chính xác. ByRef trong mẫu dưới đây đã được thay đổi để ByVal (cho 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