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

Windows Forms Discussion :

[C# 2005]treeview, dataset et "requete"


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut [C# 2005]treeview : associer un entier à un noeud
    Bonjour à tous,

    j'ai un petit soucis avec un treeview sur lequel je souhaite ajouter pour chaque noued parent le noeud enfant correspondant ...

    c'est à dire que dans ma dataset, j'ai ces 3 tables :

    tab1 :
    idChampTab1
    valeurChampTab1

    tab2 :
    idChampTab2
    valeurChampTab2

    et la 3ème, qui receuille en fait 2 collones et sur chacune les 2 ID ci-dessus soit :

    idChampTab1
    idChampTab2



    J'aimerai donc pouvoir récupérer pour un noeud Parent (valeurChampTab1) sa correspondance dans la Tab2 (valeurChampTab2) et la mettre en sous-noeud, seulement je ne vois pas bien comment faire celà
    si on peut faire des "requetes" et comment ?

    voilà le code que j'ai fait actuellement ...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach (DataRow row in m_DataSet.Tables["Tab1"].Rows)
                    {
                        TreeNode noeudPere = new TreeNode(row["valeurChampTab1"].ToString());
                        treeView.Nodes.Add(noeudPere);
     
                        foreach (DataRow CurrentRow in m_DataSet.Tables["tab2"].Rows)
                        {
                            noeudPere.Nodes.Add("", CurrentRow["valeurChampTab2"].ToString());
                        }
     
                    }
    voilà merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Personne ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Tant pis

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Par défaut
    Ca doit marcher comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    foreach (DataRow row in m_DataSet.Tables["Tab1"].Rows)
                    {
                        TreeNode noeudPere = new TreeNode(row["valeurChampTab1"].ToString());
     
     
                        foreach (DataRow CurrentRow in m_DataSet.Tables["tab2"].Rows)
                        {
                            noeudPere.Nodes.Add(CurrentRow["valeurChampTab2"].ToString());
                        }
     
                       treeView.Nodes.Add(noeudPere);
     
                    }

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Si tu n'as pas eu de réponses c'est peut être parce que tu as mal exposé ton problème ("Un problème sans solution est un problème mal posé", je ne sais plus qui est l'auteur de cette maxime mais c'est assez vrai).
    J'aimerai donc pouvoir récupérer pour un noeud Parent (valeurChampTab1) sa correspondance dans la Tab2 (valeurChampTab2)
    Tu parles de correspondance. Afin de comprendre clairement comment se fait cette correspondance, quel est le lien entre Tab1 et Tab2 ? Ce sont des tables dans une base de données ? La correspondance est liée à une relation ? ...

    Autant de questions que tu dois te poser pour donner toutes les informations utiles pour la résolution de ton problème.

    Ensuite un bon dessin vaut mieux qu'un long discours. Une image de ton TreeView actuel ainsi qu'une image du résultat que tu aimerais obtenir en indiquant les données mises en oeuvre (càd tables et leur contenu par exemple, contenu qui se retrouverait sur les images des TreeView pour que le lien se fasse facilement entre ton contrôle et les données) serait je pense plus parlant

    Bref, à toi de présenter la chose d'une manière différente, qui permette de comprendre rapidement le problème ainsi que ce que tu souhaites obtenir

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Citation Envoyé par amin001
    Ca doit marcher comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    foreach (DataRow row in m_DataSet.Tables["Tab1"].Rows)
                    {
                        TreeNode noeudPere = new TreeNode(row["valeurChampTab1"].ToString());
     
     
                        foreach (DataRow CurrentRow in m_DataSet.Tables["tab2"].Rows)
                        {
                            noeudPere.Nodes.Add(CurrentRow["valeurChampTab2"].ToString());
                        }
     
                       treeView.Nodes.Add(noeudPere);
     
                    }
    En fait je me suis mal exprimé peut-être

    si tu veux, ce que je voudrais avoir c'est ceci :


    valeurChampTab1
    **valeurChampTab2

    où valeurChampTab2 est récupéré par rapport à la 3ème Table référant les relations entre


    soit si tu veux,

    Tab1
    idChampTab1 /*****\ valeurChampTab1

    1 /*****\ valeur1
    2 /*****\ valeur2
    .... etc


    Tab2
    idChampTab2 /*****\ valeurChampTab2

    45 /*****\ valeur45
    87 /*****\ valeur87

    Tab3
    idChampTab1 /*****\ idCHampTab2
    1 /*****\ 87
    2 /*****\ 45



    et récupéré dans mon treview ceci :

    valeur1 => (noeuds fils) valeur87
    valeur2 => (...) valeur45
    et ainsi de suite, hor là pour le moment je reçois tous les champs de la 2nd table pour chaque noeud père

    où donc les valeurs de la table1 sont les noeuds pères ... et ceux de la table 2 les noeuds fils reliés par rapport à la Table 3

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Citation Envoyé par StormimOn
    Si tu n'as pas eu de réponses c'est peut être parce que tu as mal exposé ton problème ("Un problème sans solution est un problème mal posé", je ne sais plus qui est l'auteur de cette maxime mais c'est assez vrai).
    Tu parles de correspondance. Afin de comprendre clairement comment se fait cette correspondance, quel est le lien entre Tab1 et Tab2 ? Ce sont des tables dans une base de données ? La correspondance est liée à une relation ? ...

    Autant de questions que tu dois te poser pour donner toutes les informations utiles pour la résolution de ton problème.

    Ensuite un bon dessin vaut mieux qu'un long discours. Une image de ton TreeView actuel ainsi qu'une image du résultat que tu aimerais obtenir en indiquant les données mises en oeuvre (càd tables et leur contenu par exemple, contenu qui se retrouverait sur les images des TreeView pour que le lien se fasse facilement entre ton contrôle et les données) serait je pense plus parlant

    Bref, à toi de présenter la chose d'une manière différente, qui permette de comprendre rapidement le problème ainsi que ce que tu souhaites obtenir
    j'étais justement en train de le faire

  8. #8
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Il serait peut être plus simple de regrouper l'information dans une seule DataTable que tu traiterais afin d'alimenter la collection de noeuds du TreeView.

    Un exemple avec les données regroupées sur une seule DataTable :

    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
    // Création de la table 
    DataTable table = new DataTable("Test");
    table.Columns.Add("IdParent", Type.GetType("System.Int32"));
    table.Columns.Add("ValParent", Type.GetType("System.String"));
    table.Columns.Add("IdEnfant", Type.GetType("System.Int32"));
    table.Columns.Add("ValEnfant", Type.GetType("System.String"));
    // Ajout de données à la table
    table.Rows.Add(new object[] { 1, "parent1", 1, "enfant1" });
    table.Rows.Add(new object[] { 1, "parent1", 2, "enfant2" });
    table.Rows.Add(new object[] { 2, "parent2", 3, "enfant1" });
    table.Rows.Add(new object[] { 2, "parent2", 4, "enfant2" });
    table.Rows.Add(new object[] { 2, "parent2", 5, "enfant3" });
    table.Rows.Add(new object[] { 3, "parent3", 6, "enfant1" });
    // Alimentation du TreeView
    TreeNode node = null;
    foreach (DataRow row in table.Rows)
    {
        // Si on passe à un nouveau noeud parent
        if (node == null || string.Compare(node.Name, row[0].ToString()) != 0)
        {
            // création du noeud parent
            node = treeView1.Nodes.Add(row[0].ToString(), row[1].ToString());
        }
        // ajout des enfants au noeud parent
        node.Nodes.Add(row[2].ToString(), row[3].ToString());
    }

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Merci, modifé à mes besoins ça fonctionne

    je modifie le titre afin de ne pas créer un autre topic ... autant continuer sur le même


    Ma question, c'est : puis-je associer à un noeud son id dans la Table ?
    ou plus simplement comment associer un entier à un noeud ?

    j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (TreeNodeCollectoin currentNode in noeudSelectionne.SelectNode)
    mais ça ne fonctoinne pas


    Merci pour votre aide en tout cas

  10. #10
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Les noeuds enfant d'un TreeNode sont accessibles par la propriétés Nodes. Donc ce que tu devrais écrire serait peut être plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (TreeNode enfant in noeudSelectionne.Nodes)
    {
        ...
    }
    Avec noeudSelectionne le noeud parent.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Citation Envoyé par StormimOn
    Les noeuds enfant d'un TreeNode sont accessibles par la propriétés Nodes. Donc ce que tu devrais écrire serait peut être plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (TreeNode enfant in noeudSelectionne.Nodes)
    {
        ...
    }
    Avec noeudSelectionne le noeud parent.
    oiu j'ai édité juste après mon message car j'ai trouvé pour ça finalement, si je lisais un peu plus les méthodes de classe

  12. #12
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Si tout est réglé et que tu n'as pas d'autres questions, gratifie ce sujet d'un petit clic sur en bas

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Citation Envoyé par StormimOn
    Si tout est réglé et que tu n'as pas d'autres questions, gratifie ce sujet d'un petit clic sur en bas
    il reste juste cette question que j'avais mise aussi et après je mets résolu

    puis-je associer à un noeud son id dans la Table ?
    ou plus simplement comment associer un entier à un noeud ?

  14. #14
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Carew
    puis-je associer à un noeud son id dans la Table ?
    ou plus simplement comment associer un entier à un noeud ?
    Regarde le code que j'ai mis, tu verras que dans la DataTable j'ai mis des entiers, qui pourraient correspondre à des identifiants en BDD ou autre. Ces derniers sont associés aux objets Node créés, bien que ce soit par un String.

    Il y a peut être une autre et meilleure manière de procéder mais celle-ci devrait fonctionner

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Citation Envoyé par StormimOn
    Regarde le code que j'ai mis, tu verras que dans la DataTable j'ai mis des entiers, qui pourraient correspondre à des identifiants en BDD ou autre. Ces derniers sont associés aux objets Node créés, bien que ce soit par un String.

    Il y a peut être une autre et meilleure manière de procéder mais celle-ci devrait fonctionner
    Autant pour moi je n'y avait pas fait attention, merci de ton aide

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

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