Problème avec un fichier XML

suethi75 Messages postés 101 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 31 août 2009 - 28 mai 2009 à 21:59
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 29 mai 2009 à 07:32
Bonsoir

Je développe un petite application en C# orienté Objet. Cependant, j'ai un soucis.

 private void button1_Click(object sender, EventArgs e)
        {
            mesProgrammes lesprogrammes = new mesProgrammes();
            ArrayList tProgrammes = new ArrayList();
            tProgrammes= lesprogrammes.chargementDansCollection();

            programme ceProgramme = new programme();

            for (int i = 0; i < tProgrammes.Count - 1; i++)
            {
                ceProgramme = (programme)tProgrammes[i];
            }

Je voudrais avoir une indication sur le message suivant:


Impossible d'effectuer un cast d'un objet de type 'System.Xml.XmlElement' en type 'concert.programme'. Cette phrase est pointé sur la ligne:

                                             ceProgramme = (programme)tProgrammes[i];

5 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
28 mai 2009 à 22:14
Bonsoir,
 ce message indique que les système est incapable de convertir un objet dans un type donné.
j'imagine que tu as ce message à l'execution, car comme ton ArrayList n'est pas typé, le compilateur ne peut pas savoir que la conversion est impossible.
pour eviter ce genre de surprise à l'execution utilise des collections typées, mà c'est le compilateur qui fera le travail.

est-ce que la methode chargementDansCollection donne bien une collection (arraylist) de programmes ?

au fait, inutile d'initialiser les variables tProgrammes et ceProgramme , car elles sont par la suite forcées.

C# is amazing, enjoy it!
suethi75 Messages postés 101 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 31 août 2009
28 mai 2009 à 22:29
la methode chargementDansCollection donne bien une collection.

Voici le code la methode:

 public ArrayList chargementDansCollection()
        {
            XmlDocument docProg = new XmlDocument();
            docProg.Load(@".\listProgramme.xml");

            XmlNodeList listProgramme = docProg.GetElementsByTagName("Programme");

            programme leProgramme;

            foreach (XmlElement varProg in listProgramme)
            {
                leProgramme = new programme();

                string dateS = varProg["Date"].InnerText;
                leProgramme.setDateConcert(DateTime.Parse(dateS));

                //string heureS = varProg["Heure"].InnerText;
                //leProgramme.setDateConcert(DateTime.Parse(heureS));

                string heureS = varProg["Heure"].InnerText;
                leProgramme.setHeureConcert(heureS);

                string lieuS = varProg["Lieu"].InnerText;
                leProgramme.setLieuSpectacle(lieuS);

                string salleS = varProg["Salle"].InnerText;
                leProgramme.setSalleSpectacle(salleS);

                this.mesProgr.Add(varProg);
               
            }
            return mesProgr;

        }

J'ai compté le nombre d'objet dans la collection et il y a bien le compte. Cependant je n'arrive pas après utiliser les données de la collection.

Merci pour ton aide
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
28 mai 2009 à 22:35
bonsoir,

le probleme vient de là:
       this.mesProgr.Add(varProg);
ta collection n'est pas une collection de "programe", mais d'élément XML;

ne serait-ce pas :
    this.mesProgr.Add(leProgramme);
que tu voulais utiliser ?

C# is amazing, enjoy it!
suethi75 Messages postés 101 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 31 août 2009
28 mai 2009 à 22:43
yes!!!! merci.

J'ai le même soucis dans une autre procédure:

Voici le code:

       //POUR ACTUALISER LA DATAGRIDVIEW
        private void chargerDatagridview()
        {
         // Creation des variables
            mesProgrammes lesProgrammes = new mesProgrammes();
            liste = lesProgrammes.chargementDansCollection();

            dgvFormProgramme.Rows.Clear();
            dgvFormProgramme.Columns.Clear();

            //Noms des colonnes du datagridview
            Date.Name = "Date spectacle";
            Heure.Name = "Heure spectacle";
            Lieu.Name = "Lieu spectacle";
            Salle.Name = "Salle spectacle";
            Id.Name = "Identifiant";
            Id.Visible = false;

            // Ajout des colonnes dans la datagridview
            dgvFormProgramme.Columns.Add(Date);
            dgvFormProgramme.Columns.Add(Heure);
            dgvFormProgramme.Columns.Add(Lieu);
            dgvFormProgramme.Columns.Add(Salle);
            dgvFormProgramme.Columns.Add(Id);
            int i=0;
        
            // parcourir la collection et afficher dans la datagridview
            foreach (XmlElement ligne in liste)
            {
                //ajout d'une ligne dans la datagriview
                dgvFormProgramme.Rows.Add();

               // .InnerText pour récupérer la valeur du noeud;
                dgvFormProgramme[0, i].Value = ligne.SelectSingleNode("Date").InnerText;
                dgvFormProgramme[1, i].Value = ligne.SelectSingleNode("Heure").InnerText;
                dgvFormProgramme[2, i].Value = ligne.SelectSingleNode("Lieu").InnerText;
                dgvFormProgramme[3, i].Value = ligne.SelectSingleNode("Salle").InnerText;
                dgvFormProgramme[4, i].Value = i.ToString(); ;
              
                i++;
            }

Le problème est pointé sur le:  foreach (XmlElement ligne in liste)

Impossible d'effectuer un cast d'un objet de type 'concert.programme' en type 'System.Xml.XmlElement'.

Merci pout ton aide

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

Posez votre question
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
29 mai 2009 à 07:32
bonjour,

oui c'est normal, si tu as corrigé la methode chargementDansCollection pour generer une liste de "programme"
il te faut maintenant utiliser
   foreach (programme ligne in liste)

puis utiliser les champs de la class "programme" pour remplir tes lignes de datadrig
 dgvFormProgramme[0, i].Value =ligne.=>ici un champ de la classe programme<=

C# is amazing, enjoy it!
Rejoignez-nous