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 :

Problème de récupération de valeur dans une DataGridView


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Points : 51
    Points
    51
    Par défaut Problème de récupération de valeur dans une DataGridView
    Bonjour,

    Actuellement je fais des essais pour récupérer une valeur précise d'une ligne d'un DataGridView.

    Voici le code dans le formulaire pour appeler la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ComboBoxReference_Validated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxReference.Validated
            referenceSKF = ComboBoxReference.Text
            RepriseAutomatiqueValeurSKF()
            MsgBox(DInt)
    End Sub
    Voici la procédure de la reprise automatique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public DInt as Single
    Public Sub RepriseAutomatiqueValeurSKF()
            DInt = RepriseAutoDInt()
    End Sub

    Et le code de la reprise automatique :

    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
    25
    26
    Private Function RepriseAutoDInt() As Single
            Dim a As String
            Dim i As Integer
            Dim dtreprise As New DataTable
            Dim dtgv As New DataGridView
     
            i = 0
     
            dtreprise = OuvrirCatalogueSKF() ' lit un fichier .txt et créer une DtataTable de celui-ci que je retourne dans cette celle-ci
            dtgv.DataSource = dtreprise
     
            Do
                a = CStr(dtgv.Item(0, i).Value) 'Erreur
     
                If referenceSKF <> a Then
                    i = i + 1
                End If
     
                If i = dtgv.RowCount() Then
                    Exit Do
                End If
     
            Loop Until referenceSKF = a
     
            Return CSng(dtgv.Item(1, (i)).Value) 'De ce fait je soupçonne la même Erreur ici
    End Function
    'Erreur =
    L'exception ArgumentOutOfRangeExeption n'a pas été gérée par le controle utilisateur
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre : Index

    De mes recherche j'en ai déduit que le DataGridView ne se créé pas ou mal, les colonnes/lignes/valeurs ne sont pas présentent, donc pas d'index...

    Peut être le problème est différent de ce que je suppose, mais je ne sais comment le régler. Y a t'il une autre méthode pour récupérer la valeur en utilisant directement le DataTable ?


    Cordialement,
    Bacube

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Je ne me sers jamais des datatables pour remplir mes DGV je préfère le faire à la main, plus long mais au moins je sais ce qu'il y a dedans et où...

    Mais il me semble qu'il faut que tu fasses un fill ou un truc comme ça pour charger les données dans le DGV

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Oui moi aussi je procédais comme ça avant, mais mon supérieur veut que l'on utilise des fichier .txt à charger dans le programme, comme ça quand les données vont changer pas besoins d'aller modifier à l'intérieur même du programme.

    Donc je me retrouve coincé à utiliser un DataTable pour intégrer les fameuses données dans un DataGridView.

    A moins que je peux générer un DataGridView directement du fichier .txt ?


    Cordialement,
    Bacube

  4. #4
    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
    Bonjour,
    vu l'erreur, je pense qu'elle est liée au différentes base de comptage.
    DGV.Item est de base 0
    Dgv.RowCount de base 1
    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                If i = dtgv.RowCount - 1 Then
                    Exit Do
                End If
    Cette condition devant être tester en premier dans la boucle.

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    Dans ton code, la variable i représente un itérateur de ligne ou de colonne ? --> ligne .. OK mais --> colonne !!! ou je me suis trompé ?

  6. #6
    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
    Citation Envoyé par bsm2006 Voir le message
    Bonjour,
    Dans ton code, la variable i représente un itérateur de ligne ou de colonne ? --> ligne .. OK mais --> colonne !!! ou je me suis trompé ?
    Pourtant, cela semble correct selon : http://msdn.microsoft.com/fr-fr/libr...=VS.90%29.aspx

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Citation Envoyé par bsm2006 Voir le message
    Bonjour,
    Dans ton code, la variable i représente un itérateur de ligne ou de colonne ? --> ligne .. OK mais --> colonne !!! ou je me suis trompé ?

    Non c'est bien ça, le premier indice est l'index de colonne et le second l'index de ligne, je pense que le problème vient du fait que tu cherches dans un DGV vide, soit parce que ta requête ne ramène rien, soit parce que tu cherches avant que le DGV ne se remplisse, ou alors tes indices sont hors limite.

    Ce que disais Chrismonoye est juste, ton rowcount est de base 1 il faut donc que tu lui fasse un -1 pour avoir un indice de base 0.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Merci je vais tester ça pour voir si je peux récupérer la valeur.

    Par contre on parle de base de comptage (base 0 et Base 1), y a t'il une documentation la dessus, ou pourriez vous m'expliquer la différence ?


    Cordialement,
    Bacube

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    En VB tout les index sont de base 0, c'est à dire que le compte part de 0 et fait donc 0, 1, 2, etc... alors que les count() partent de 1 (1, 2, 3, etc...) il faut donc faire des -1 quand tu t'en sert pour indexer une fonctions.

  10. #10
    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
    Bonjour,
    autre chose, dans le code fourni, il y a création d'un DGV, mais on ne voit pas comment il est ajouté au formulaire , genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            With dtgv
                .Location = New Point(10, 10)
                .Width = 700
                .Height = 150
            End With
            Me.Controls.Add(dtgv)

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonjour,
    autre chose, dans le code fourni, il y a création d'un DGV, mais on ne voit pas comment il est ajouté au formulaire , genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            With dtgv
                .Location = New Point(10, 10)
                .Width = 700
                .Height = 150
            End With
            Me.Controls.Add(dtgv)

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET et Java (Android)
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET et Java (Android)
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Points : 36
    Points
    36
    Par défaut
    Salut.

    J'ai rajouter quelque commentaire pour t'indiquer pourquoi a mon avis ca plante :
    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
    25
    26
    27
    28
    29
     Private Function RepriseAutoDInt() As Single
            Dim a As String
            Dim i As Integer
            Dim dtreprise As New DataTable
            Dim dtgv As New DataGridView
     
            i = 0
     
            dtreprise = OuvrirCatalogueSKF() ' lit un fichier .txt et créer une DtataTable de celui-ci que je retourne dans cette celle-ci
            dtgv.DataSource = dtreprise
     
            Do
                'Ici ca plante forcement si tu n'as pas de ligne dans ton DataGridView ou si la valeur est null 
                ' il faut faire un controle !!
                a = CStr(dtgv.Item(0, i).Value) 'Erreur
     
                If referenceSKF <> a Then
                    i = i + 1
                End If
     
                'A verifier avant
                If i = dtgv.RowCount() Then
                    Exit Do
                End If
     
            Loop Until referenceSKF = a
     
            Return CSng(dtgv.Item(1, (i)).Value) 'De ce fait je soupçonne la même Erreur ici
        End Function
    Ensuite je te propose plutot ce code :
    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
    25
    26
    27
    28
    29
    30
    31
    32
     Private Function RepriseAutoDInt() As Single
            Dim a As String
            Dim Val_a As Single
            Dim i As Integer
            Dim dtreprise As New DataTable
            Dim dtgv As New DataGridView
     
            dtreprise = OuvrirCatalogueSKF() ' lit un fichier .txt et créer une DtataTable de celui-ci que je retourne dans cette celle-ci
            dtgv.DataSource = dtreprise
     
            i = 0
            a = String.Empty
     
            Dim Row As DataGridViewRow
            While i < dtgv.Rows.Count And a <> referenceSKF
                Row = dtgv.Rows(i)
     
                If Row.Cells(0).Value Is System.DBNull.Value Then
                    a =  String.Empty
                Else
                    a = CStr(Row.Cells(0).Value)
                End If
     
            End While
     
     
            If Single.TryParse(a, Val_a) Then
                Return Val_a
            Else
                Return 0
            End If
        End Function

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2008, 10h59
  2. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  3. Affectation/récupération de valeurs dans une Enum ?
    Par elitost dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2006, 16h12
  4. [SQL] Problème de récupération des valeurs d'une liste multiple en php
    Par BOLARD dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/05/2006, 00h29
  5. Problème de récupérations de données dans une table mysql
    Par Helpine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/03/2006, 19h07

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