Cs0029 Impossible de convertir implicitement le type string en Bll.Pays

Résolu/Fermé
danny243 Messages postés 74 Date d'inscription vendredi 19 mars 2021 Statut Membre Dernière intervention 16 octobre 2021 - 24 avril 2021 à 05:18
Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 septembre 2024 - 25 avril 2021 à 21:13
Bonjour tout le monde actuellement je travaille sur un projet et dans mon projet j'utilise une architecture en 3 couches j'ai une chouche Bll, DAL, et UIL. et dans mon projet j'utilise une base des données que je manipule sauf que j'ai une petite erreur dans mon code lorsque j'essaie de récuperer chaque ligne de ma bd ça me dit Cs0029 Impossible de convertir implicitement le type string en Bll.Pays

en fait je n'arrive pas à assigner une nouvelle valeur à ma proprieté pays qui est de type Pays
quelqu'un peut m'aider merci

 public static void ChargerListeEtudiant()
        {
            //Appel de la fonction dans AccessDB pour la connection à la DB
            var listeFilms = new ObservableCollection<Film>();
            DataTable dt = AccessDB.ConnecterBD();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                var etu = new Film
                {
                    Id = Int32.Parse(dt.Rows[i]["Matricule"].ToString()),
                    Titre = dt.Rows[i]["Nom"].ToString(),
                    Annee = Int32.Parse(dt.Rows[i]["Prenom"].ToString()), 
// voilà mon erreur
                    Pays =  dt.Rows[i]["Pays"].ToString(),
                };

                listeFilms.Add(etu);
            }

            films = listeFilms;
        }

5 réponses

Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 septembre 2024 919
24 avril 2021 à 08:34
Bonjour

ID et Annee sont du type int, pour pouvoir les charger depuis ta base de données tu as dû les parser.
Int32.Parse est une méthode de conversion de string vers int que Microsoft a codée.

Le type « Pays » c’est toi qui l’as codé, c’est donc à toi de définir comment on convertit de string vers pays. Une fois la logique de conversion définie, tu as plusieurs options pour la mettre en œuvre:
  • une méthode dans ta classe de chargement des données qui prend le string en paramètre et qui renvoie un Pays
    Pays =  ConvertStringToPays(dt.Rows[i]["Pays"].ToString())
  • une extension de string ToPays(), qui renvoie un Pays
    Pays =  dt.Rows[i]["Pays"].ToString().ToPays()
  • une méthode static Parse de la classe Pays (enfin si Pays est une classe)
    Pays =  dt.Rows[i]["Pays"].ToString()
  • un opérateur de conversion implicite qui définit ce que fait le = dans
    Pays = Pays.Parse(dt.Rows[i]["Pays"].ToString())
  • un opérateur de conversion explicite qui nécessite de caster
    Pays = (Pays)dt.Rows[i]["Pays"].ToString()
  • y’en a sûrement d’autres

0
danny243 Messages postés 74 Date d'inscription vendredi 19 mars 2021 Statut Membre Dernière intervention 16 octobre 2021
25 avril 2021 à 01:17
si je comprends bien je dois créer une méthode qui convertit mon type Pays en string
0
danny243 Messages postés 74 Date d'inscription vendredi 19 mars 2021 Statut Membre Dernière intervention 16 octobre 2021
25 avril 2021 à 01:16
sauf que dans pays j'ai juste une proprieté et un attribut et une methode NotifyPropertyChanged(string propname) voilà ma classe Pays

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient;
using System.ComponentModel;
using DAL;

namespace BLL
{
  public  class Pays: INotifyPropertyChanged
    {

        public void NotifyPropertyChanged(string propName)
        {
            if (this.PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }

        private string nomPays;
        public string NomPays
        {
            get
            {
                return nomPays;
            }

            set
            {
                if (this.nomPays != value)
                {
                    this.nomPays = value;
                    this.NotifyPropertyChanged("NomPays");
                }
            }
        }

        
        public event PropertyChangedEventHandler PropertyChanged;
    }
}


0
Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 septembre 2024 919
25 avril 2021 à 08:38
Bonjour

alors dans ce cas, une initialisation / affectation est possible

Pays =  new Pays {MonPays = dt.Rows[i]["Pays"].ToString() }


Tu peux aussi ajouter un constructeur à ta classe Pays, qui prendrait une string ou même carrément le type de dt.Rows[i]["Pays"] en paramètre et affecterait la propriété MomPays.

Mais avec les éléments que tu m'a montré, je m'interroge sur l'utilité de cette classe.
  • Une seule propriété
  • Pas de méthode
  • Pas d'évènement (à part propertychanged)


Bref en l'état, il me semble que la propriété Pays de la classe Film serait une string, ton code serait plus simple.
0
danny243 Messages postés 74 Date d'inscription vendredi 19 mars 2021 Statut Membre Dernière intervention 16 octobre 2021
25 avril 2021 à 20:39
okay d"acoord merci bien
0

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

Posez votre question
Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 septembre 2024 919
25 avril 2021 à 21:13
de rien
0