IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C# 2.0] Problème de conversion de type


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [C# 2.0] Problème de conversion de type
    Bonjour amis dévelopeurs,
    J'ai une erreur bizare:
    "Impossible d'effectuer un cast d'un objet de type 'System.Data.DataRowView' en type 'System.IConvertible"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int PartyId = Convert.ToInt32(comboBox3.SelectedValue);
    int DrinkId = Convert.ToInt32(listBox3.SelectedValue);
    C'est bizare car la première conversion provoque l'erreur, mais pas la deuxième.
    Quelqu'un à une idée?

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    int.TryParse semble fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int PartyId = 0;  
    int.TryParse(comboBox3.SelectedText, out PartyId);
    int DrinkId = Convert.ToInt32(listBox3.SelectedValue);
    Mais ça n'explique pas l'erreur d'avant. Ca devrait toujours fonctionner ou ne jamais fonctionner. Bizare.

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par freerider1
    int.TryParse semble fonctionner
    Qu'entends-tu par là ? Tu veux dire qu'il n'y a plus d'exception ? Car si c'est ça attention, la méthode TryParse ne lève pas d'exceptions, elle renvoie juste true ou false en fonction du résultat de la conversion. Si celle-ci n'a pu se faire, la variable PartyId restera à 0.

    Il faut parfois se méfier des "semble fonctionner"

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci StormimOn.
    Je savais qu'il y avait une valeur de retour, mais je ne l'ai pas testée car ça semblait fonctionner (paaaas bien). Mais ça fonctionnait car j'avais mis la valeur en dure dans l'appelle de la focntion.
    Donc je n'ai en fait pas progressé.
    Donc ma question reste entière, comment récupérer la valeur entière d'un élément sélectionné dans une listbox ou combobox?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    On va y arriver.
    Avec la propriété Text, ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int PartyId = Convert.ToInt32(comboBox3.Text); 
    int DrinkId = Convert.ToInt32(listBox3.Text);
    Je ne comprends pas bien la nuance entre Text et SelectedText?

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    selectedtext, c'est pas ce qui est surligné en bleu lorsque tu fait un clické déplacé sur le text ?

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par freerider1
    On va y arriver.
    Avec la propriété Text, ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int PartyId = Convert.ToInt32(comboBox3.Text); 
    int DrinkId = Convert.ToInt32(listBox3.Text);
    Je ne comprends pas bien la nuance entre Text et SelectedText?
    c'est pas SelectedText mais SelectedValue .
    SelectedValue est l'objet qui est sélectionné, ce qui dans ton cas veux dire (d'après le message d'erreur du premier post) que c'est une DataRowView qui est renvoyé. Or je ne vois pas comment on peux caster un DataRowView en int

    la propriété Text te renvoi le texte affiché.
    Tu vas le dire : "Comment ça se fait que j'ai bien ce que je veux d'afficher dans ma comboBox ?" Tout simplement parce que quand tu met un objet dans une ListBox ou une comboBox, il y a un appel à ToString de fait automatique.

    En en gros il ne faut pas que tu essai de convertir l'objet mais une des ces valeurs. Dans ton cas c'est la valeur qui renvoyé par le ToString mais tu pourrais te servir d'une autre valeur de ton objet.

    En espérant avoir été clair ....

  8. #8
    Membre à l'essai

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par NiamorH
    selectedtext, c'est pas ce qui est surligné en bleu lorsque tu fait un clické déplacé sur le text ?
    oui c'est ca. Et tu peux même récupérer la position de début de sélection dans la chaîne avec SelectectionStart, et le nombre de caractères sélectionnés avec SelectionLength.

    Rodolphe

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour les infos.
    Faudra que je vérifie, mais il me semble que la conversion d'objet en int fonctionne pour la listbox et pas pour la combobox.
    Si vous avez une solution plus éléguante pour récupérer la valeur en int, ça m'intéresse (car string --> int, c'est pas top).

  10. #10
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Tu peux toujours utiliser ceci (si ca réponds à ton besoin)

    Une classe Item qui servira de conteneur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class Item
    {
        private int _code;
     
        public int Code
        {
            get { return _code; }
            set { _code = value; }
        }
     
        private string _texte;
     
        public string Texte
        {
            get { return _texte; }
            set { _texte = value; }
        }
     
        public Item(int code, string texte)
        {
            _code = code;
            _texte = texte;
        }
    }
    Tu utilises cette classe pour alimenter une collection qui servira de DataSource (pour une ComboBox ou une ListBox par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    listBox1.ValueMember = "Code";
    listBox1.DisplayMember = "Texte";
    List<Item> items = new List<Item>();
    items.Add(new Item(1, "Coucou !"));
    items.Add(new Item(2, "Au revoir !"));
    listBox1.DataSource = items;
    Tu pourras ainsi directement récupérer un int au besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int entier = (int)listBox1.SelectedValue;
    }

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta proposition StormimOn.
    En fait j'allimente mes composants (listbox, combobox) via un bindingsource d'une des tables de mon dataset. Donc je pourrais allez rechercher la valeur numeric correspondante dans ma table et la convertir en int, mais c'est un peu lourd. Je vais donc me contenter de la solution srting --> int.
    Merci à tous pour votre aide.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Je viens de regarder les messages que vous aviez laissés. Mon problème est que je souhaite afficher le prix en sélectionnant la valeur de combobox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void cB_Article_SelectedValueChanged(object sender, EventArgs e)
            {            
                    int produitID = Convert.ToInt16(cB_Article.SelectedValue);
                    decimal produitPrix = GetProduitPrix(produitID);//Convert.ToDecimal(cB_Article.SelectedIndex);
     
                    tB_PrixUnitaire.Text = produitPrix.ToString();                     
            }
    en exécutant mon programme j'ai une erreur "Informations supplémentaires : Impossible d'effectuer un cast d'un objet de type 'System.Data.DataRowView' en type 'System.IConvertible'." au niveau de la ligne int produitID.

    Pourriez vous m'aider?

  13. #13
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Dachetache Voir le message
    Pourriez vous m'aider?
    Pour t'aider, il faudrait que l'on sache comment tu alimentes ta Combobox.

    Car a priori tu ne l'alimentes pas avec des Int16.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    j'alimente par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     DataTable dt = new DataTable();
                using (SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=Commandes;Integrated Security=True"))
                {
                    using (SqlCommand cmd = new SqlCommand("SELECT ProduitName,ProduitPrix FROM [dbo].[Produits]", con))
                    {
                        con.Open();
                        SqlDataReader reader = cmd.ExecuteReader();
                        dt.Load(reader);
                    }
                } return dt;
    Nom : Capture d'écran 2017-08-09 14.32.47.png
Affichages : 1081
Taille : 3,2 Ko Nom : Capture d'écran 2017-08-07 17.30.20.png
Affichages : 1077
Taille : 1,6 Ko

  15. #15
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Voilà pourquoi

    En fait tu lui transmet un objet contenant le résultat de ta requête. Il ne peut donc pas traduire le tout en un Int16. Ce que tu souhaites récupérer c'est sa composante "ProduitPrix".

    Après, je ne sais pas comment fonctionne le databinding avec la connexion en directe. Pour ma part j'opterais pour la solution suivante :
    1. Tu fais ta requête et récupère le résultat dans un objet de type "Produit" (que tu devras créer), contenant les propriétés Nom et Prix (+autres si besoin).
    2. Tu alimentes ta combobox avec la liste des produits obtenu par la requête
    3. Tu récupère le prix en faisant un "((Produit)ComboBox.SelectedValue).Prix"

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    J'ai trouvé la solution en faisant un try et catch

  17. #17
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Dachetache Voir le message
    J'ai trouvé la solution en faisant un try et catch
    ??? Et ça marche?

  18. #18
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 196
    Points : 5 785
    Points
    5 785
    Par défaut
    Doc Combobox : https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    SelectedValue : Obtient ou définit la valeur de la propriété de membre spécifiée par la ValueMember propriété
    ValueMember : Obtient ou définit le chemin d’accès de la propriété à utiliser comme valeur réelle pour les éléments dans le ListControl

    Je ne suis pas sur que ce soit SelectedValue qui t'interesse ni l’événement SelectedValueChanged.
    Essaie avec SelectedText et SelectedIndexChanged.

    Mais bon peut être que je me trompe.

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Merci pour vos message j'ai trouvé la solution c'était que l'exception n'a pas été géré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void cB_Article_SelectedValueChanged(object sender, EventArgs e)
            {    
                  try
                 {
                    int produitID = Convert.ToInt16(cB_Article.SelectedValue);
                    decimal produitPrix = GetProduitPrix(produitID);//Convert.ToDecimal(cB_Article.SelectedIndex);
     
                    tB_PrixUnitaire.Text = produitPrix.ToString();
                }
               catch
              {}                     
            }

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2008, 16h40
  2. Problème de conversion de type de données
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/06/2007, 10h51
  3. Problème de conversion de types
    Par Rayndell dans le forum C++
    Réponses: 2
    Dernier message: 25/05/2007, 10h45
  4. [WD10] Problème de conversion de type
    Par rphenix dans le forum WinDev
    Réponses: 2
    Dernier message: 15/01/2007, 14h22
  5. [Excel] Problème de conversion de type de données
    Par keiserjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2006, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo