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 :

Utilisation de Ctype avec un type variable


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 97
    Points : 51
    Points
    51
    Par défaut Utilisation de Ctype avec un type variable
    Bonjour,

    je rencontre un petit soucis

    J'ai un dataset contenant plusieurs tables. Je souhaite remplir ma table à partir d'un fichier texte dont les différents champs sont séparés par une virgule.

    Jusqu'ici ca va ;-)

    Ensuite je souhaite remplir ma table dont j'ai défini les types des colonnes lors de la création. (Ex : col 1 est un string, col2 est un décimal etc)

    Je souhaite faire une boucle qui me récupère pour chaque ligne du fichier texte l'élément correspondant à chaque colonne et le cast en fonction du type défini dans ma table

    Mais je bloque à ce niveau là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Do While Not sr.EndOfStream()
                            ligne = sr.ReadLine()
                            tab_temp = ligne.Split(",")
                            For i = 0 To (ds.Tables.Item("Price").Columns.Count() - 1)
                            Dim type_col As Object = ds.Tables.Item("Price").Columns.Item(i).DataType()
                                ligne_temp.Item(i) = CType(tab_temp(i), type_col)
                            Next
                        Loop
    Ctype ne reconnais pas type_col. le message d'erreur : Type 'type_col' non defini.

    Comment faire pour que Ctype m'accepte le type de la colonne 'i' ?

    D'avance merci pour toute l'aide que vous pourrez m'apporter.

    Bonne nuit
    Tommy57

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    CType prend comme argument le nom d'un type, pas un objet de type Type... Tu peux utiliser Convert.ChangeType à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_temp.Item(i) = Convert.ChangeType(tab_temp(i), type_col)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 97
    Points : 51
    Points
    51
    Par défaut
    Merci Tomlev,

    j'ai modifié selon tes conseils, le compilateur l'accepte mais il bloque à l'exécution sur ça :

    Ma chaine tab_temp contient que des string
    Ma chaine de sortie doit au final contenir : String, INT16, Date, Decimal

    Tant qu'il converti de String à string, cela fonctionne, dès qu'il arrive sur le premier Decimal, il me donne une exception :

    "Le format de la chaîne d'entrée est incorrect."

    J'ai donc essayé les modifs suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim type_col As TypeCode
                                type_col = Convert.GetTypeCode(ds.Tables.Item("Price").Columns.Item(i))
                                ligne_temp.Item(i) = Convert.ChangeType(tab_temp(i), type_col)
    et je reçois l'erreur suivante :

    "Le format de la chaîne d'entrée est incorrect.Impossible de stocker <0000000000000004.23> dans la colonne px_achat. Type attendu est Decimal."

    Je dois louper un truc mais je n'arrive pas à trouver quoi !! :-(

    En fait tant qu'il est en string il le fait bien et dès qu'il rencontre un autre type il râle!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    J'avais pas fait gaffe au début, mais pourquoi tu utilises Convert.GetTypeCode ? Ca ne sert pas du tout à ça... il faut utiliser DataType, comme tu faisais au début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim type_col As Type = ds.Tables("Price").Columns(i).DataType
    ligne_temp(i) = Convert.ChangeType(tab_temp(i), type_col)
    (au passage, il n'est pas nécessaire de préciser .Item à chaque fois, c'est implicite)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonsoir,
    peut être utiliser cette surcharge qui spécifie les formats "culturels" que l'on trouvera dans le fichier texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_temp(i) = Convert.ChangeType(tab_temp(i), type_col, CultureInfo.CreateSpecificCulture("en-US"))
    Ici ce fichier est anglais ?
    A voir.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 97
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    ca y est, j'ai résolu mon problème.

    Dans ma chaine j'avais cette valeur <0000000000000004.23> que je voulais transformer en Decimal. Il me renvoyais une erreur.

    J'ai donc rajouter une instruction supplémentaire afin de remplacer le "." par une "," afin qu'il m'accepte cette valeur.

    Je vais essayer l'astuce de chrismonoye car il est vrai que le fichier txt semble provenir d'un anglais.

    Encore merci à vous pour votre aide !!!! ;-)
    Tommy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser "Radiobutton.Checked" avec nom de variable
    Par Léa53 dans le forum Windows Forms
    Réponses: 19
    Dernier message: 28/04/2009, 14h21
  2. Création de variable avec un type variable !
    Par Marcool dans le forum C++
    Réponses: 17
    Dernier message: 28/08/2008, 16h22
  3. [deque] utilisation d'insert avec un type personnel
    Par Mysteric dans le forum SL & STL
    Réponses: 4
    Dernier message: 14/11/2007, 10h42
  4. cast avec un type variable
    Par Axwell dans le forum C++
    Réponses: 2
    Dernier message: 13/11/2007, 10h06
  5. utilisation de "LIKE" avec un type datetime dans r
    Par ericmart dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/11/2003, 14h58

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