IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Suppression des noeuds cochés d'un treeview


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut Suppression des noeuds cochés d'un treeview
    Bonjour,

    J'ai un treeview sur lequel j'ai rajouté l'option ShowCheckBoxes="All" de sorte à avoir une case à cocher à côté de chaque noeud.

    Je voudrais savoir comment faire pour supprimer de mon treeview l'ensemble des noeuds qui ont été cochés.

    J'ai vu de la cas de la sélection que c'était du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeView1.Nodes.Remove(treeView1.SelectedNode);
    Cependant, j'ai essayé le code ci-dessous et cela m'affiche une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeView1.Nodes.Remove(treeView1.CheckedNodes);
    (ps : J'ai une fonction javascript qui me coche/décoche l'ensemble des noeuds enfants lorsque le noeud parent est coché/décoché)

    Est-ce que quelqu'un saurait comment faire pour la suppression ?

    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Agit sur ta source de données.
    Tu récupères la value des nodes checkées, stocke ces values dans une List<string>, remove de ta datasource les éléments contenus dans cette liste, et rebinde ton treeview.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    En fait, cette méthode ne m'arrange pas trop car le but final est de faire un transfert de noeuds entre deux treeview et aussi car mes données de mon treeview sont rentrées directement en dur et ne sont issues d'une base où d'un fichier xml.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    Il faut parcourir les nodes et tester TreeNode.Checked
    Si tu veux également agir sur les childNode créer une méthode que tu appeleras dans ta boucle et qui prend en paramètre le nodeParrent comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     public void supprimernodeChecked(TreeNode node)
            {
                foreach (TreeNode childNode in node.Nodes)
                {
                    if (childNode.Checked)
                        node.Nodes.Remove(childNode);
                    else
                        supprimernodeChecked(childNode);
                }
            }
    Ensuite il te suffit de boucler sur tes nodes, si le node est checked on le supprime, sinon on appel la méthode pour traiter les childNode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach (TreeNode node in treeView1.Nodes)
                {
                    if (node.Checked)
                        treeView1.Nodes.Remove(node);
                    else
                        supprimernodeChecked(node);
                }
    Bonne continuation a+

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut
    salut, juste pour préciser le post précédent :

    le n'est pas une bonne idée pour une suppression d'objet d'une liste.
    (si le nombre d'objets de la liste change tu vas te faire insulter par VS!!)

    il vaut mieux faire un qui se décrémente afin d'enlever tes objets depuis la fin de la liste.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (int cpt = treeView1.Nodes.Count - 1; cpt >= 0; cpt--)
                {
                    if (treeView1.Nodes[cpt].Checked)
                        treeView1.Nodes.Remove(treeView1.Nodes[cpt]);
                    else
                        supprimernodeChecked(treeView1.Nodes[cpt]);
                }

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    C'est exacte je n'avais plus pensé que l'on ne peut modifier une collection si on la parcours avec un foreach ....

    Bien vu !! Bonne journée à toi !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    Par contre, en faisant comme ça, j'ai un message d'erreur me disant que ma pile d'execution a atteint sa limite et que j'ai peut être une boucle infinie au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ToutesReferencesNominatives.Nodes[cpt].Checked)
    ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    En fait, mon but final est de pouvoir faire des transferts de noeuds entre deux treeview à l'aide de bouton.

    En reprenant l'idée du code qui m'a été proposé, j'ai implémenté une fonction qui me fait bien le transfert de noeuds entre les deux treeview (parent+enfants) mais seulement si c'est le noeud racine qui est coché.

    Lorsque je clique sur un noeud enfant, cela ne marche plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected void TransfertDroit_Click(object sender, ImageClickEventArgs e)
            {
     
                for (int cpt = TreeView1.Nodes.Count - 1; cpt >= 0; cpt--)
                {
                    if (TreeView1.Nodes[cpt].Checked)
                    {
                       Treeview2.Nodes.Add(TreeView1.Nodes[cpt]);
     
                    }
                }
            }
    J'ai essayé de faire différents essaies sur les childNode mais sans succés. Est-ce que quelqu'un verrait ce qu'il faut rajouter comme condition?

    Merci.

  9. #9
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach (TreeNode node in TreeView1.Nodes)
                {
                    if (node.Checked)
                    {
                        TreeNode nodeClone = node.Clone() as TreeNode;
                        TreeView2.Nodes.Add(nodeClone);
                        TreeView1.Nodes.Remove(node);
                    }
                }

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    Ok mais le problème, c'est que la propriété Clone() est inaccéssible en raison de son niveau de protection.

  11. #11
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    ah tu es en asp.NET

    tu fais ta propre méthode clone

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    TreeNode CloneTreeNode(TreeNode  node)
    {
        TreeNode nodeClone = new TreeNode();
        nodeClone.Checked = node.Checked;
        nodeClone.Expanded = node.Expanded;
        nodeClone.ImageUrl = node.ImageUrl;
        nodeClone.ImageToolTip = node.ImageToolTip;
        nodeClone.NavigateUrl = node.NavigateUrl;
        nodeClone.PopulateOnDemand = node.PopulateOnDemand;
        nodeClone.SelectAction = node.SelectAction;
        nodeClone.Selected = node.Selected;
        if (node.ViewState["ShowCheckBox"] != null)
        {
            nodeClone.ShowCheckBox = node.ShowCheckBox;
        }
        nodeClone.Target = node.Target;
        nodeClone.Text = node.Text;
        nodeClone.ToolTip = node.ToolTip;
        nodeClone.Value = node.Value;
        return nodeClone ;
    }

    ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach (TreeNode node in TreeView1.Nodes)
                {
                    if (node.Checked)
                    {
                        TreeNode nodeClone = CloneTreeNode(node);
                        TreeView2.Nodes.Add(nodeClone);
                        TreeView1.Nodes.Remove(node);
                    }
                }

Discussions similaires

  1. [Débutant] Savoir les noeuds cochés dans une TreeView
    Par ekydeta dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/01/2015, 17h12
  2. Itération des noeuds finaux d'un treeviewer
    Par p1xl_01 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 14/03/2011, 19h26
  3. Filtrage des noeuds d'un menu treeview
    Par mortis dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/04/2009, 22h38
  4. Suppression des noeuds d'un JTREE
    Par dark_geek dans le forum Composants
    Réponses: 1
    Dernier message: 25/03/2009, 12h52
  5. Réponses: 1
    Dernier message: 17/05/2006, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo