C# remplir un treeview à partir d'une base de données access

Résolu
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010 - 29 juil. 2008 à 10:05
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010 - 30 juil. 2008 à 19:50
bonjour à tout le monde,
je suis entrain de faire une application en C# qui interagit avec une base de données access
et j'aimerai utiliser un treeview. j'ai  fai un petit peu de recherche avant de poster ma question et je ss tombé sur ça:
http://www.csharpfr.com/infomsg_REMPLIR-TREEVIEW-DEPUIS-BASE-ACCESS_798372.aspx
mais j n'arrive pas trop..
donc voila si qlq '"un pêu m'aider ça sera tres genti
merci d'avance

25 réponses

ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
29 juil. 2008 à 16:02
Bon je vais tenter de faire simple.
Pour commencer télécharge cette impression écran http://images2.photomania.com/551956/1/rad15B5E.png
Sur cette image je t'ai afficher les 3 points importants à faire apres avoir installe le TreeView avec la toolbox (à gauche de la fenêtre, non affiche sur l'image)
1-clique en bas à gauche pour passer en mode "design"
2-clique sur la fleche à droite du TreeView
3-Choisis ta source de données. Je pense que tu devras en créer une nouvelle mais là c'est tout expliqué pas à pas.

Voili voilou.
@Pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
1
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
29 juil. 2008 à 12:45
Salut,

Qu'est ce que tu ne comprend pas exactement ?
Sais-tu que tu n'est pas obligé de remplir ton TreeView en code-behind comme dans le post ? Tu peux aussi, avec le mode design, relier ton TreeView à ta base facilement.

@Pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 13:31
tt d'abord je te remercie pour ta reponse..
en fait le truc c'est que je suis débutant et je n'ai jamaiss travaillé avec des treeview..donc je ne sais pas pas comment m'y prendre..si tu avais une solution ça sera tres genti...
pour la solution que tu viens de me proposé : " relier en mode disigne" je sais pas si c'est la mêm chose q'avec les dataGridView mais je n'arrive pas...

merci
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
29 juil. 2008 à 15:04
Salut,

tu bosses avec Visual Studio ?

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 15:17
oui je bosse sou Visual Studio.
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
29 juil. 2008 à 16:05
Argh non je viens de vérifier après avoir eue un doute çe ne marchera pas il faudrait que tu passes par un fichier XML.
Tu es obligé de le construire en code-behind.
Je t'envoie un exemple mais avec une base SQL parce que c'est le seul exemple que j'ai sous la main

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 16:16
ok tres bien,
j'aten ta reponse alors et encore une fois de pààlus merci baucoup pour ton aide
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
29 juil. 2008 à 16:16
Alors voilà :


// connection … la base de donnees








SqlConnection
Conn =

new



SqlConnection
(

"chaine de connection"
);Conn.Open();


SqlDataAdapter
a =

new



SqlDataAdapter
(

"requete"
, Conn);


DataSet
s =

new



DataSet
();a.Fill(s);


//creation de toutes les branches Root






foreach
(

DataRow
dr

in
s.Tables[0].Rows){


TreeNode
n =

null
;


//tu recupere ce que tu veux afficher






string
root dr[0].ToString();n


new



TreeNode
(root);TreeView1.Nodes.Add(n);

}

Conn.Close();


Attention ce code ne permet que de creer un niveau car je ne sait pas comment tu gère pour savoir quelle branche est la fille de quelle autre branche. Si tu veux un truc plus complet donne moi ta requête en m'expliquant les champs que tu veux récupérer et ta manière de fonctionner.





<hr />


Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 16:38
encore merci pour tt t efforts..
voila je t'explique un peu ce que veux faire.
enfaite j'ai une table ou je stocke des machines. cette table a les champs suivants "unité"  "nom de la machines" et d'autre champs
donc je veux afficher moi dans ma treeview :le champs unité et nom de la machine
preumier niveau unité-->deuxieme niveau nom des machines
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 16:50
avec le code que tu ma filé j'arrive à afficher le champ "nom de la machine"
maint il me faut donc lea aficher par "unité"
je sais pas si je me ss bien expliqué...j'atens ta proposition
et encore merci baucoup
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
29 juil. 2008 à 16:53
Unité c'est quoi ? Le nombre qu'il y a en stock ? une référence ? C'est pour savoir a peu près le format que ton TreeView va avoir, du genre :

Unité1
   -Machine1
Unité2
   -Machine2

ou alors

Unité1
   -Machine1
   -Machine2
Unité2
   -Machine3
Unité3
   -Machine4
   -Machine5

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 16:57
c'est le 2 eme cas..c'est a dire
Unité1
   -Machine1
   -Machine2
Unité2
   -Machine3
Unité3
   -Machine4
   -Machine5
en fait les machines sont reparties par unité
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
29 juil. 2008 à 17:08
Ok.
Alors voila ce que ca donne après modif :
// connection … la base de donnees

SqlConnection Conn =
new
SqlConnection(
"chaine de connection");Conn.Open();

SqlDataAdapter a =
new
SqlDataAdapter(
"requete", Conn);

DataSet s =
new
DataSet();a.Fill(s);

foreach (
DataRow dr
in s.Tables[0].Rows){

      //creation de toutes les branches Root

      TreeNode n =
null;

      //tu recupere ce que tu veux afficher
      string root dr[0].ToString();      n

new
TreeNode(root);      TreeView1.Nodes.Add(n);

      //Tu regarde s'il y a des branches qui partent de la

      foreach (
DataRow dr
in s.Tables[0].Rows)      {

            //Si l'unite est la meme

            if (dr[0].ToString() == root)            {

                  TreeNode n2 =
null;

                  //tu recupere le libelle
                  string child dr[1].ToString();                  n2

new
TreeNode(child);

                  //tu rajoute un enfant a cette branche root                  n.ChildNodes.Add(n2);

            }

      }

}

Conn.Close();

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres pers
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 17:13
ok tres bien je vais essayer ça, je vais voir si ça marche de ma part.
encore merci pour ton aide.
c'est tres genti de ta part.
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 17:29
j'ai essayé ton, code et aparement il y'a deux erreures
la preumiere erreur: dans la deuxime boucle  foreach (
DataRow dr
in s.Tables[0].Rows)
il me souligne dr comme erreur.
et la deuxieme erreur il reconnait pas
ChildNodes dans la ligne

 
//tu rajoute un enfant a cette branche root                  n.ChildNodes.Add(n2);

je voualais te demander une autre chose par raport a la requette sql

puisque j'ai deux champ a recuperé "unité" et "libellé"( libelé == nom de la machine)

donc j'aurais: private string SqlGrid = "SELECT MACHINES.UNITE, MACHINES.LIBELE FROM MACHINES"; ?
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
29 juil. 2008 à 17:33
j'ai oublié un autre problème toute a l'heur quand j'ai affiché les unité..je n'ai fait que lister tout ce qu'il y'a dans le champs "unite" de ma base, mais comment faire pour ne pas repeter d'aficher la même unité plusieur fois)?
encore merci pour ton aide
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
30 juil. 2008 à 09:27
Salut,

Bon pour ne pas répeter tes unités il faut rajouter un "distinct" avant MACHINES.UNITE dans ta requête (celle que tu as mise est OK).
Pour ton erreur sur "dr" c'est parcequ'il existe déjà dans la boucle du dessus, t'as qu'a l'appeller "dr2".
En modifiant ça, ton autre erreur devrai s'annuler.
Par contre la prochaine fois, s'il y a une erreur, précise ce qu'il t'affiche, parce que là c'était explicite et tu aurai pu comprendre facilement. Il faut que tu cherche un peu plus avant de poser ta question.
@Pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
30 juil. 2008 à 11:05
bonjour,
je m'exuse c'est vrai que j'ai pu chercher un peu plus avant de demander..dailleur je l'ai fais
j'ai changé le nom du datarow dr par dr2 par contre l'erreur pour
ChildNode
est tjrs là..l'erreur c'est:
System.Windows.Forms.TreeNode doese note contain a difinition for '
ChildNode
'
je sais si je me suis bien exliqué
entre temps j'ai fai autrement:

            foreach (DataRow dr in this.DtsGrid.Tables[0].Rows)
            {

                TreeNode n = null;

                //tu recupere ce que tu veux afficher

                string root = dr[0].ToString();

                n = new TreeNode(root);

                this.treeView1.Nodes.Add(n);

                foreach (DataRow dr1 in this.DtsGrid.Tables[0].Rows)
                {

                    //Si l'unite est la meme

                    if (dr1[0].ToString() == root)
                    {

                        TreeNode n2 = null;

                        //tu recupere le libelle

                        string child = dr1[1].ToString();

                        n2 = new TreeNode(child);

                        //tu rajoute un enfant a cette branche root
                        //n.Nodes.Add(n2);
                        n.ChildNodes.Add(n2);

                    }

                }
   
            }
j'ai changé ma requette comme tu m' di mais il m'aporte tjrs toutes les lignes c'est a dire il repete tjrs les même lignes.
je vais essayer de travailler dessus pour voir si je pux faire qlq chose
encore je te remercie pour ton aide et désolé du temps que je t'ai pris
medgha
0
medgha Messages postés 41 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 3 mai 2010
30 juil. 2008 à 11:08
dslé dans le code que j'ai mis tout a fais en bas j'ai mis:
                       
                        //tu rajoute un enfant a cette branche root
                        n.Nodes.Add(n2);
                        //n.ChildNodes.Add(n2);
aulieu de ce que j'ai mis dans le message d'avant pour eviter l'eereur dont je parlais :
System.Windows.Forms.TreeNode doese note contain a difinition for ' ChildNode
'
encore désolé
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
30 juil. 2008 à 11:43
Pour ta requête essaye un "group by machines.unite à la fin"

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
Rejoignez-nous