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 :

treeview et informations concernant les noeuds


Sujet :

C#

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 984
    Points : 2 205
    Points
    2 205
    Par défaut treeview et informations concernant les noeuds
    Bonjour

    Je cherche à construire des arborescences de réseau genre réseau d'eau.

    Pour cela j'ai besoin de pouvoir
    -déplacer les nœuds dans l'arborescence->j'ai trouvé comment faire
    -glisser coller des éléments depuis des listes (liste de vannes et autres objets) sur le treeview -> pour le moment ça marchouille
    -enregistrer l'arborescence dans un fichier (csv ou xml) -> au pire j'arriverais bien à le faire nœud par nœud...
    -définir pour chaque nœuds certaines caractéristiques, qui sont différentes suivant le type d'objet ajouté dans l'arborescence et là ça coince, les noeuds d'un treeview disposent de rien pour stocker de l'info (des diamètres, des masses, des dimensions ; en fonction du type d'objet ajouté au treeview).

    Je n'ai jamais manipulé les datasource, databinding et autres or je soupçonne qu'un databinding basé sur un fichier Xml serait surement très puissant mais je n'arrive pas à conceptualiser qui ferait quoi dans mon affaire.

    Comment ça devrait marcher ? un datagridview lié à un xml (le datagridview se charge à partir du xml et se sauvegarde dedans) et le treeview est "lié" au datagridview dont il prendra les informations de certains champs pour afficher l'arborescence ?

    Merci par avance pour votre aiguillage

    PS: désolé pour le vague de la question mais l'objet de ma question est notamment d'utiliser le bon vocabulaire pour enfin réussir à comprendre

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 984
    Points : 2 205
    Points
    2 205
    Par défaut
    merci pour le lien mais j'ai trouvé plusieurs pistes pour sauvegarder mon treeview
    avec le XMl ou même via la sérialisation binaire
    c'est pour ça que j'ai noté ça

    [France]-enregistrer l'arborescence dans un fichier (csv ou xml) -> au pire j'arriverais bien à le faire nœud par nœud...
    Mon soucis est surtout que je dois définir pour chacun des nœuds des propriétés que l'objet TreeNode n'offre pas et du coup je ne vois pas comment faire.

    J'en suis à un stade où je crois comprendre que le Treeview ne peut pas être une collection d'objets de différents type que je peux ajouter, retirer, sauvegarder ou recharger. J'ai l'impression que je suis obligé de créer une collection de mes objets hiérarchisés; une bdd (je teste SQLlite là), un List ou autre
    et que le treeview doit être ensuite construit en reprenant quelques éléments de la collection (nom et hiérarchie) grâce à un algo récursif.
    Si ensuite je veux pouvoir modifier la collection via le Treeview il me faudrait gérer les ItemDrag, double clic et autre modif du texte du nœud pour aller mettre à jour la collection (bdd ou List) en conséquence.
    Bref, une interaction entre données et Treeview tout à la main

    Si vous me confirmez que c'est effectivement comme ça qu'il faut faire, ça complique vachement ce que j'avais en tête mais au moins je ne me prendrais plus la tête à chercher ce qui n'est pas

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par petitours Voir le message
    Mon soucis est surtout que je dois définir pour chacun des nœuds des propriétés que l'objet TreeNode n'offre pas et du coup je ne vois pas comment faire.

    J'en suis à un stade où je crois comprendre que le Treeview ne peut pas être une collection d'objets de différents type que je peux ajouter, retirer, sauvegarder ou recharger.
    La propriété Tag d'un Contrôle
    Dans cette propriété tu peux mettre n'importe quel objet qui dérive de la classe Object

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 984
    Points : 2 205
    Points
    2 205
    Par défaut
    Bonjour
    Donc pas besoin de gérer ma collection par ailleurs ?

    Je construis l'arborescence dans le treeview, je réorganise les éléments, j'en ajoute d'autres, je les modifie (via des double clic dessus par exemple) et hop tout est dans le treeview, il ne me reste plus qu'à enregistrer l'objet treeview dans un xml ou binaire pour avoir une sauvegarde de l'ensemble des objets hiérarchisés ?

    énorme !

    Merci

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par petitours Voir le message
    pour avoir une sauvegarde de l'ensemble des objets hiérarchisés ?
    Attention, le Tag est souvent utilisé (pour ma part) pour garder les données persistantes liées au noeud du TreeView.
    Dans un de mes projets, on utilisait les tags pour gérer les enabled/couleurs/etc (aspect visuel) qui était utilisé par une méthode qui récupérait le contenu de la propriété pour l'étudier.

  7. #7
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 984
    Points : 2 205
    Points
    2 205
    Par défaut
    Bonjour

    C'est mal barré, la sérialisation ne prend même pas la propriété ContextMenuStrip ! c'est la première propriété un peu avancée que je tente d'enregistrer avec les nœuds

    J'ai fait ceci qui fonctionne très bien pour sauvegarder et recharger les nœuds mais perte de la propriété ContextMenuStrip sur la route :-(
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    //----------------------------------------------------------------------------------
            private void btEnregistrerTreeView_Click(object sender, EventArgs e)
            {
                FileStream fs = new FileStream("C:\\test.arbo", FileMode.Create);
     
                try
                {
                    ArrayList nodeList = new ArrayList();
     
                    BinaryFormatter formatter = new BinaryFormatter();
     
                    foreach (TreeNode node in (treeView1.Nodes))
                    {
                        nodeList.Add(node);
                    }
     
                    formatter.Serialize(fs, nodeList);
                }
                catch (SerializationException ex)
                {
                   MessageBox.Show("Failed to serialize. Reason: " + ex.Message);
                    throw;
                }
                finally
                {
                    if (fs != null) fs.Close();
                }
            }
     
     
    //----------------------------------------------------------------------------------
            private void btChargerTreeView_Click(object sender, EventArgs e)
            {
                FileStream fs = new FileStream("C:\\test.arbo", FileMode.Open);
     
                try
                {
     
     
                    treeView1.Nodes.Clear();
                    treeView1.BeginUpdate();            //desactive le redessin du treeview le temps de le remplir
     
                    BinaryFormatter formatter = new BinaryFormatter();
     
                    ArrayList nodeList = (ArrayList)formatter.Deserialize(fs);
     
                    foreach (TreeNode node in nodeList)
                    {
                        treeView1.Nodes.Add(node);
                    }
                    treeView1.EndUpdate();
     
                }
                catch (SerializationException ex)
                {
                    MessageBox.Show("Failed to deserialize. Reason: " + ex.Message);
                    throw;
                }
                finally
                {
                    fs.Close();
                }
            }
     
     
    //----------------------------------------------------------------------------------
     
            private void btClearTreeView_Click(object sender, EventArgs e)
            {
                treeView1.Nodes.Clear();
     
            }
    Le ContextMenuStrip est un cas particulier ou l'idée de sauvegarder un treeview qui contiendrait l'ensemble des données de mon arborescence (y compris le diamètre, poids et autres infos sur les différents type d’éléments mis dans le TAG des nœuds) est une très mauvaise idée ?.

    En supposant que j'abandonne cette idée il me faut définir l'ensemble de ma hiérarchie et toutes les caractéristiques de ses éléments dans une base de données (SQLite en l'occurrence) ; il me faudrait alors agir sur la base de données quand je fais des drag and drop, des renommages ou autres actions sur le treeview.

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    bonjour

    Juste une petite intervention pour signaler quelque chose...

    Il ne me semble pas approprié, d'un point de vue objet que tu sauvegardes ton treeview.

    ton treeview ne devrait être que l'expression visuel d'une structure arborescente, donc, de ta structure de données.

    de là, modifier le treeview devrait revenir à modifier ta source de données qui permet de construire / visualiser le treeview. En faisant ainsi, tu t'autoriseras à facilement
    changer d'objet visuel de représentation de tes données si tu te rends compte qu'une autre approche que le treeview est utile.

    Et du coup, pour la sauvegarde de tes données, tu auras surement plus de facilité à le faire puisque tu n'auras pas à sauvegarder des objets graphiques ou des controles
    utilisateurs...

    Essayes de bien séparer la couche "métier" (ta structure de données) de sa représentation.

  9. #9
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 984
    Points : 2 205
    Points
    2 205
    Par défaut
    Bonjour

    et merci, cela répond précisément au doute dans lequel j’étais hier soir avec mon dernier post.
    Je vais me souvenir de ce principe de séparer le métier de l'affichage, ca m'évitera d'autres prises de têtes dans le futur.

    Mais du coup on est d'accord qu'il n'est pas possible qu'une intervention sur le treeview modifie automatiquement les données (renommage d'un nœud, drag and drop d'un nœud) ?
    Je dois prévoir par le code une modification des données à chaque action possible de l'utilisateur sur le treeview, contrairement à un datagrid par exemple qui serait lié aux données.

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    absolument ça par rapport à la modification dans le sens TreeView vers structure de données... il faut que le Treeview modifie lui même la donnée...

  11. #11
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 984
    Points : 2 205
    Points
    2 205
    Par défaut
    Merci

    je n'ai plus qu'à réfléchir au "métier" et comprendre l'entity Framework pour afficher efficacement ma base de donnée SQLite dans mon treeview et la modifier efficacement depuis le treeview !

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/10/2010, 10h19
  2. Réponses: 2
    Dernier message: 08/04/2010, 08h54
  3. Information concernant les DNS
    Par agencep dans le forum 1&1
    Réponses: 2
    Dernier message: 11/03/2010, 15h10
  4. information concernant les menus déroulants
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 24/05/2008, 17h29

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