web-dev-qa-db-fra.com

Effacer une vue d'arbre

Je charge une TreeView depuis une liste, et l'utilisateur a un bouton pour supprimer un élément et le supprime de la liste sans problème, mais il existe également un bouton pour mettre à jour TreeView avec la liste après que les éléments ont été supprimés, I n'aurez aucun problème à ajouter les nouveaux éléments à la TreeView, mais existe-t-il un moyen d'effacer tous les éléments de la TreeView avant d'ajouter de nouveaux éléments, de sorte que je n'ai pas de doublons dans la TreeView? J'ai essayé de chercher la réponse sur d'autres sites Internet, mais je ne l'ai pas trouvée. J'ai essayé des choses simples, telles que:

treeView1.Items.Clear();

mais ça ne marche pas.

Désolé, je l'ai mentionné dans un commentaire. En dessous, je suis à peu près sûr que cette ligne le clarifie, je ne l'utilise tout simplement pas au bon endroit, merci à tous pour vos réponses.

16
Beef

Tout d’abord, Items et Clear doivent être capitalisés dans votre exemple. Peut-être que c'est le seul problème.

Deuxièmement, si vous remplissez l'arborescence en définissant sa propriété ItemsSource, vous ne pouvez pas ajouter ni supprimer d'éléments à la main de sa collection Items. Au lieu de cela, vous devez faire de la source un ObservableCollection au lieu d'une liste. Ensuite, l'arborescence se mettra automatiquement à jour pour refléter les modifications apportées à la collection source.

3
Brennan Vincent

Pour effacer un arbre, effacez les nœuds.

treeView1.Nodes.Clear();
41
rifaco

as-tu essayé 

treeView1.DataBind();
0
Ahmad

J'avais une méthode récursive pour remplir TreeView après l'avoir effacé, lors d'une actualisation. Je passais TreeNode par référence et les noeuds restaient visibles et pouvaient être sélectionnés dans TreeView même si Clear les supprimait logiquement de la liste des noeuds. Quand j'ai changé la méthode pour passer le TreeNode par valeur, cela m'a permis correctement d'effacer les nœuds. Le ByRef dans l'exemple ci-dessous a dû être remplacé par ByVal (pour 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
0
gotorg