Remplir un treeview depuis une base Access

Résolu
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006 - 18 août 2006 à 13:19
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006 - 18 août 2006 à 15:08
Bonjours à tous!

Voilà j'ai un problème:
J'ai un treeView dans une form1.
J'ai une base de donnée Access.
Lorsque form1 démarre, une requete va dans la table "compte" et sélectionne toute les entrées du champ "nom" pour afficher les données trouver dans le treeView1 sous la forme de Nodes.
Mon code ressemble à ça:

private void Form1_Load(object sender, System.EventArgs e)
{
            //requete de selection du champ nom dans la table compte
            string requete = "SELECT (nom) FROM compte";

            //création de la connection
            OdbcConnection connection = new OdbcConnection();

            //chaine de connection DSN
            string chaineDeConnection = "DSN=prog_sys_db";

            //affectation de la chaine de connection à la connection
            connection.ConnectionString = chaineDeConnection;
           
            //ouverture de la connection
            connection.Open();

            //création du DataSet
            DataSet data = new DataSet();

            //création du OdbcDataAdapter
            OdbcDataAdapter adapter = new OdbcDataAdapter(requete, connection);
           
            //remplissage du DataSet avec les résultats de la requête
            adapter.Fill(data, "compte");

            //stockage des données dans une dataTable
            DataTable treeView1 = data.Tables["compte"];
           
            //affectation des données de datagrid à la datatable
            this.treeView1.Nodes = treeView1;

            // Fermeture de la connexion
            connection.Close();
}

Le problème est que quand je compile, il me trouve deux erreurs:
-Impossible de convertir implicitement le type 'System.Data.DataTable' en 'System.Windows.Forms.TreeNodeCollection'

-La propriété ou l'indexeur 'System.Windows.Forms.TreeView.Nodes' ne peut pas être assigné -- il est en lecture seule
Apparement on ne peut pas affecter les données au treeView...
J'ai trouvé quelques sujet sur le forum qui concerne justement ce problème, mais je n'ai pas réussi utilisé les infos pour mon projet.
Si quelqu'un pouvait me donner un coup de main...
Je vous en remercie d'avance!

cpadmin

8 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
18 août 2006 à 14:36
Si tu veux récupérer toutes les rows de toutes les tables :

foreach (
DataTable dt
in myDataSet)
{
  
foreach(
DataRow dr
in dt.Rows)
   {
      //
   }
}

<hr size="2" />VC# forever
3
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006
18 août 2006 à 15:08
Voilà j'ai trouver!

J'ai fais :

foreach

(DataRow row
in treeView1.Rows)
{
         TreeNode NewNode =
new TreeNode(row["nom"].ToString());
         
this.treeView1.Nodes.Add(NewNode);
}

Je te remerci pour l'aide que tu m'a apporter!

A la proch!

cpadmin
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
18 août 2006 à 13:34
Salut,
Ben non le treeview n'a pas de property DataSource (normal, comment ferait-il pour représenter les noeuds?). Une fois que les données sont dans ton DataSet (ou DataTable) tu dois ajouter "manuellement" les données dans ton treeview.

<hr size="2" />VC# forever
0
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006
18 août 2006 à 13:39
Je les insèrent avec une boucle?
Faut définir le nombre de donnée trouvé avec la requete et ensuite je prend la première donnée trouver en je l'a "add", puis la deuxième, etc jusqu'a ce que j'arrive au nombre de donnée trouver?
0

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

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
18 août 2006 à 13:45
Voui...
Un petit foreach rows in dataTable.Rows devrait faire l'affaire...

<hr size="2" />VC# forever
0
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006
18 août 2006 à 14:14
ouais le foreach ca joue! J'ai 3 entrée dans mon champ nom, et au démarrage de mon programme il y a bien 3 nodes dans le treeView...
mais mon point faible, c'est la boucle. :-(
comment on va pour connaitre le nombre d'entrée stocker dans le dataSet?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
18 août 2006 à 14:19
Le nombre de table tu veux dire?
Si oui, je dirais de tête : myDataSet.Tables.Count;

<hr size="2" />VC# forever
0
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006
18 août 2006 à 14:27
oui!
alors si je te suis bien, mon foreach donne :

foreach

(DataRow row
in treeView1.Rows
{

         for (i=0; i<=data.Tables.Count; i++)
         {
                  TreeNode node =
new TreeNode(row[i]);
                  
this.treeView1.Nodes.Add(node);
         }
}

Je veux pas te demander de me programmer le truc, mais j'arrive mieux a comprendre si je vois...
0
Rejoignez-nous