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

medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 10:05 - Dernière réponse : medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention
- 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
Afficher la suite 

25 réponses

Répondre au sujet
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 29 juil. 2008 à 12:45
0
Utile
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
Commenter la réponse de ofonadroite
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 13:31
0
Utile
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
Commenter la réponse de medgha
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 29 juil. 2008 à 15:04
0
Utile
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
Commenter la réponse de ofonadroite
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 15:17
0
Utile
oui je bosse sou Visual Studio.
Commenter la réponse de medgha
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 29 juil. 2008 à 16:02
0
Utile
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
Commenter la réponse de ofonadroite
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 29 juil. 2008 à 16:05
0
Utile
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
Commenter la réponse de ofonadroite
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 16:16
0
Utile
ok tres bien,
j'aten ta reponse alors et encore une fois de pààlus merci baucoup pour ton aide
Commenter la réponse de medgha
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 29 juil. 2008 à 16:16
0
Utile
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
Commenter la réponse de ofonadroite
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 16:38
0
Utile
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
Commenter la réponse de medgha
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 16:50
0
Utile
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
Commenter la réponse de medgha
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 29 juil. 2008 à 16:53
0
Utile
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
Commenter la réponse de ofonadroite
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 16:57
0
Utile
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é
Commenter la réponse de medgha
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 29 juil. 2008 à 17:08
0
Utile
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
Commenter la réponse de ofonadroite
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 17:13
0
Utile
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.
Commenter la réponse de medgha
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 17:29
0
Utile
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"; ?
Commenter la réponse de medgha
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 29 juil. 2008 à 17:33
0
Utile
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
Commenter la réponse de medgha
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 30 juil. 2008 à 09:27
0
Utile
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
Commenter la réponse de ofonadroite
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 30 juil. 2008 à 11:05
0
Utile
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
Commenter la réponse de medgha
medgha 41 Messages postés lundi 22 mai 2006Date d'inscription 3 mai 2010 Dernière intervention - 30 juil. 2008 à 11:08
0
Utile
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é
Commenter la réponse de medgha
ofonadroite 130 Messages postés mercredi 25 juin 2008Date d'inscription 13 août 2008 Dernière intervention - 30 juil. 2008 à 11:43
0
Utile
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
Commenter la réponse de ofonadroite

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

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