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

VB.NET Discussion :

Probleme relie au Type d'une colonne DataGridView [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut Probleme relie au Type d'une colonne DataGridView
    Bonjour,

    J'ai un probleme avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 0 To sdDataGridView.RowCount - 1
                If sdDataGridView.Rows.Item(i).Cells(0).ValueType Is GetType(String) Then Exit For
                'If TypeOf (sdDataGridView.Rows.Item(i).Cells(0).Value) Is String Then Exit For
               ' lignes de code
    Next
    En fait, la colonne 0 est declare comme String, mais contenant des valeurs String et Integer (1,2,3,4,1A,3B,7,2A... par example).
    Je voudrais sortir de ma boucle For chaque fois que je rencontre un String. Malheureusement, mes nombres sont consideres comme des Strings!

    Avez-vous une idee pour ce probleme, car pour l'instant je bloque?
    Merci,

    A+
    JLuc01

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If not isnumeric(sdDataGridView.Rows.Item(i).Cells(0).ValueType) Then Exit For
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    Bonsoir,

    Merci pour cette idee.
    Mais, cela ne marche pas. Je crois d'ailleurs que mon exemple revient au meme.
    Comment differencier le String "2A" du String "2" ("2" est aussi un Integer, mais declare dans la colonne (0) par String)? Je ne sais pas.

    En fait, j'ai reussi de cette facon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim x As Integer
    Try
            x = CInt(sdDataGridView.Rows.Item(i).Cells(0).Value)
            ' Calculation
    Catch ex As Exception
            ' Nothing (On ignore cette valeur pour le calcul!)
    End Try
    Cela marche, mais je ne pense pas que c'est genial d'un point de vue programmation.
    Il y a peut-etre plus simple.

    Un point important concernant le but a atteindre (par rapport a mon premier message) est de rester dans la boucle et de faire un calcul avec les colonnes Cells(3) uniquement lorsque Cells(0) est un Integer (1,2,3... et non 1A,3B...). Desole, ma question initiale n'etait pas bien posee.

    Si toutefois vous avez d'autres idees, je suis preneur. Un Try...Catch..., c'est pas genial.
    Merci,

    A+
    JLuc01

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    voir aussi : Int32.TryParse, méthode (String, Int32).
    La proposition de rv26t devrait fonctionner en remplaçant ValueType par Value.

  5. #5
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    Bonjour,

    J'avais deja essaye avec "Value", mais sans success.
    En fait voila l'evenement que j'utilise pour etre plus clair, enfin j'espere.
    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
    Private Sub txtStepYield_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtStepYield.TextChanged
    ' ...code...
    For i = 0 To sdDataGridView.RowCount - 1
     
                'Dim x As Integer
                'Try
                '    x = CInt(sdDataGridView.Rows.Item(i).Cells(0).Value)
                'Yield calculation
                'Catch ex As Exception
                '    ' Nothing
                'End Try
     
                If Not IsNumeric(sdDataGridView.Rows.Item(i).Cells(0).Value) Then Exit Sub
                'Yield calculation
    Next
    ' ...code...
    End Sub
    Le calcul de "Yield" marche avec le Try...Catch..., mais pas avec Not IsNumeric.

    Si je comprend bien, "sdDataGridView.Rows.Item(i).Cells(0).Value" est un Object.
    Dans le Try...Catch..., si je converti l'object en Integer et c'est pas possible, c'est alors ignore dans le calcul.
    Dans le Not IsNumeric, l'object n'est pas converti et donc sera toujours un String ("2" ou "2A"), par consequent pas de calcul possible. OU alors le "IsNumeric" est capable de voir si on a un String ou un Integer en depit du fait que Cell(0) soit un String. Si toutefois vous arrive a suivre mon raisonnement.

    Je rappelle ce point important dans mon deuxieme post:
    Un point important concernant le but a atteindre (par rapport a mon premier message) est de rester dans la boucle et de faire un calcul avec les colonnes Cells(3) uniquement lorsque Cells(0) est un Integer (1,2,3... et non 1A,3B...). Desole, ma question initiale n'etait pas bien posee.
    J'ai essaye d'ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int32.TryParse(sdDataGridView.Rows.Item(i).Cells(0).Value, Int32)
    mais, j'ai l'erreur: Int32 is a type and cannot be used as an expression.

    A+
    JLuc01

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Re,
    si on applique strictement le cheminement du code du "try" à celui de la boucle, je pense qu'il faut la développer pour y intégrer le calcul, genre :
    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
            For i = 0 To DataGridView1.RowCount - 1
     
                Dim x As Integer
     
                If Not IsNumeric(DataGridView1.Rows.Item(i).Cells(0).Value) Then
     
                    Console.WriteLine(DataGridView1.Rows.Item(i).Cells(0).Value.ToString & " n'est pas numérique")
                Else
                    x = CInt(DataGridView1.Rows.Item(i).Cells(0).Value)
                    Yield calculation
     
                    Console.WriteLine(DataGridView1.Rows.Item(i).Cells(0).Value.ToString & " est numérique")
                    Console.WriteLine(x)
                End If
     
            Next

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    La proposition de rv26t devrait fonctionner en remplaçant ValueType par Value.
    Effectivement, j'ai fait un copier/coller rapide du code de départ sans faire attention, désolé .

    Citation Envoyé par JLuc01 Voir le message
    Dans le Not IsNumeric, l'object n'est pas converti et donc sera toujours un String ("2" ou "2A"), par consequent pas de calcul possible. OU alors le "IsNumeric" est capable de voir si on a un String ou un Integer en depit du fait que Cell(0) soit un String. Si toutefois vous arrive a suivre mon raisonnement.
    Un exemple avec test de isnumeric
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim Maliste As List(Of String) = New List(Of String) From {"a b c", "2", "fgh ", "21", "u y t"}
            For Each s As String In Maliste
                If IsNumeric(s) Then MessageBox.Show(s)
                If Not IsNumeric(s) Then MessageBox.Show(String.Format("La valeur '{0}' n'est pas numérique", s))
            Next
    Comme tu pourras le constater, 2 et 21 sont reconnus comme étant des numériques pas les autres.
    Par contre le isnumeric ne transforme pas la variable que tu testes.
    [Edit] Teste ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            If IsNumeric(sDataGridView.Rows.Item(i).Cells(0).Value) Then MessageBox.Show(String.Format("La valeur '{0}' est numérique mais le type est {1}", sDataGridView.Rows.Item(i).Cells(0).Value, sDataGridView.Rows.Item(i).Cells(0).Value.GetType.ToString))
    [/Edit]

    Citation Envoyé par JLuc01 Voir le message
    J'ai essaye d'ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int32.TryParse(sdDataGridView.Rows.Item(i).Cells(0).Value, Int32)
    mais, j'ai l'erreur: Int32 is a type and cannot be used as an expression.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim x As Int32
            Int32.TryParse(sDataGridView.Rows.Item(i).Cells(0).Value, x)
    yield renvoi l'élément d'une collection. Je n'ai pas la possibilité de tester avec ma version VB pour t'aider, désolé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    Salut,

    C'etait pourtant pas complique.
    Probleme resolu en suivant vos indications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim x As Integer
    If IsNumeric(sdDataGridView.Rows.Item(i).Cells(0).Value) Then
            x = CInt(sdDataGridView.Rows.Item(i).Cells(0).Value)
            'Yield Calculation
    End If
    Petit detail: "Yield calculation" signifie le calcul d'un rendement en function de certaine Cells(0). C'etait un commentaire et non une function VB.
    Merci encore a tous les deux.

    A+
    JLuc01

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

Discussions similaires

  1. recuperer le type d'une colonne access
    Par mapmip dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/04/2007, 10h04
  2. Réponses: 10
    Dernier message: 02/02/2007, 00h02
  3. [C#]Modifier le type d'une colonne dans un datatable
    Par Mahoret dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/09/2006, 09h03
  4. Changer le type d'une colonne
    Par Poisson59 dans le forum Oracle
    Réponses: 2
    Dernier message: 06/12/2005, 13h59
  5. [Débutant] Changer le type d'une colonne
    Par david71 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 08/11/2005, 11h26

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