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

Résolu
danny243 -  
 Utilisateur anonyme -
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

  1. Utilisateur anonyme
     
    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
    1. danny243
       
      si je comprends bien je dois créer une méthode qui convertit mon type Pays en string
      0
  2. danny243
     
    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
  3. Utilisateur anonyme
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question