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 :

création d'un treview avec une table


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut création d'un treview avec une table
    bonjour, aujourd'hui je m'attaque aux treeview ! c'est la première fois que j'en fais un ^^

    voici ma table sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create table categ_piece (
       id_categ_piece       uniqueidentifier     not null,
       id_categ_piece_parent   uniqueidentifier  null,
       nom_categ_piece      varchar(100)         not null,
       ordre_categ_piece    int                  not null,
       nb_points			int					 not null,
       constraint pk_categ_piece primary key nonclustered (id_categ_piece)
    )
    go
     
    alter table categ_piece
    add constraint fk_id_categ_piece_parent foreign key (id_categ_piece_parent) references categ_piece (id_categ_piece)
    go
    voici comment, dans mon winform, je cré une liste recueillant tous mes éléments :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    categs_pieces = categ_pieceDAL.GetList();
    hey oui, j'utilise le DataAccess et le c#3, une grande évolution pour moi, j'essaie d'être un peu moins nul en prog ^^
    bon, j'ai créé une fonction récursive pour créer mon arbre, mais ce n'est pas vraiment une réussite

    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
    private void Categ_pieceForm_Load(object sender, EventArgs e)
            {
                une_categ_piece = new categ_piece();
     
                categs_pieces = categ_pieceDAL.GetList();
                TreeNode LvlNode = new TreeNode();
                remplir_treeview(LvlNode, une_categ_piece);
            }
     
    private void remplir_treeview(TreeNode LvlNodeSup, categ_piece une_categ_piece)
            {
                TreeNode LvlNode = new TreeNode();
     
                List<categ_piece> level_one = new List<categ_piece>();
     
                if(une_categ_piece.id_categ_piece == Guid.Empty)
                {
                    level_one = (from c in categs_pieces
                                where c.id_categ_piece_parent == null
                                select c).ToList();
                }
                else
                {
                    level_one = (from c in categs_pieces
                                where c.id_categ_piece_parent == une_categ_piece.id_categ_piece
                                select c).ToList();
                }
     
                foreach (categ_piece categorie in level_one)
                {
                    LvlNode.Name = categorie.id_categ_piece.ToString();
                    LvlNode.Text = categorie.nom_categ_piece;
     
                    Categ_pieceTreeView.Nodes.Add(LvlNode);
     
                    remplir_treeview(LvlNode, categorie);
                }
            }
    pourriez-vous (encore) me donner un coup de main svp ?

    merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    petite question, est-il possible que mon treeview liste ma liste en comprenant la notion de clé étrangère et de multiniveau ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    voila j'ai réussi à créer mon arborescence !

    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
    private void Categ_pieceForm_Load(object sender, EventArgs e)
            {
                une_categ_piece = new categ_piece();
                categs_pieces = categ_pieceDAL.GetList();
     
                Categ_pieceTreeView.Nodes.Clear();
                Categ_pieceTreeView.Nodes.Add(string.Empty, "Catégories de pièces");
                remplir_treeview(Categ_pieceTreeView.Nodes[0], une_categ_piece);
            }
     
    private void remplir_treeview(TreeNode un_parent, categ_piece une_categ_piece)
            {
                List<categ_piece> lstCateg_piece = new List<categ_piece>();
     
                if(une_categ_piece.id_categ_piece == Guid.Empty)
                {
                    lstCateg_piece = (  from c in categs_pieces
                                        where c.id_categ_piece_parent == null
                                        orderby c.ordre_categ_piece 
                                        select c).ToList();
                }
                else
                {
                    lstCateg_piece = (  from c in categs_pieces
                                        where c.id_categ_piece_parent == une_categ_piece.id_categ_piece
                                        orderby c.ordre_categ_piece
                                        select c).ToList();
                }
     
                if (lstCateg_piece.Count != 0)
                {
                    for (int i = 0; i < lstCateg_piece.Count; i++)
                    {
                        une_categ_piece = lstCateg_piece[i];
     
                        TreeNode un_enfant = new TreeNode();
                        un_enfant.Name = une_categ_piece.id_categ_piece.ToString();
                        un_enfant.Text = une_categ_piece.nom_categ_piece;
                        un_parent.Nodes.Add(un_enfant);
                        remplir_treeview(un_enfant, une_categ_piece);
                    }
                }
            }
    encore un dernier petit détail, j'aimerais que tous mes nœuds soient ouverts dès le départ, comment puis-je ordonner ça ?

  4. #4
    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
    Bonjour;

    par rapport à ta méthode, tu fais deux requetes qui sont apreil la seul difference c'est le critere; voila la modif que j'ai apporté (pour les id j'utilise des int au lieu des Guid, tu n'as qu'a les modifier):

    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
     
    private void remplir_treeview(TreeNode LvlNodeSup, categ_piece une_categ_piece)
            {            
                int? id_categ_pieceNodeSup = une_categ_piece == null ? (int?)null : une_categ_piece.id_categ_piece;
                var level_one = (from c in categs_pieces
                                               where c.id_categ_piece_parent == id_categ_pieceNodeSup
                                                 select c).ToList();
                foreach (categ_piece categorie in level_one)
                {
                    TreeNode LvlNode = new TreeNode();
                    LvlNode.Name = categorie.id_categ_piece.ToString();
                    LvlNode.Text = categorie.nom_categ_piece;
                    if (LvlNodeSup == null)//si c'est le premier niveau
                    {                    
                        Categ_pieceTreeView.Nodes.Add(LvlNode);
                    }
                    else//sinon
                    {                    
                        LvlNodeSup.Nodes.Add(LvlNode);
                    }
                    remplir_treeview(LvlNode, categorie);
                }
            }
    et pour l'appel tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    categs_pieces = categ_pieceDAL.GetList();
    remplir_treeview(null, null);
    encore un dernier petit détail, j'aimerais que tous mes nœuds soient ouverts dès le départ, comment puis-je ordonner ça ?
    après avoir rempli la TreeView tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Categ_pieceTreeView.ExpandAll();

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut
    merci

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

Discussions similaires

  1. [AC-2007] Ouvrir la création de requête avec une table sélectionnée
    Par zoom61 dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/03/2010, 14h30
  2. fonctions stockées avec une table en argument
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/10/2004, 23h17
  3. PROBLEME AVEC UNE TABLE INTERBASE
    Par barro dans le forum InterBase
    Réponses: 1
    Dernier message: 22/09/2004, 08h16
  4. TDBChart et liaison logicielle avec une table ?
    Par Mailgifson dans le forum C++Builder
    Réponses: 10
    Dernier message: 27/07/2004, 14h11
  5. Probleme avec une table vide
    Par king dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/03/2004, 14h24

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