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 :

Erreur pour somme de colonne datagridview dans label [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut Erreur pour somme de colonne datagridview dans label
    Bonsoir amis développeur,

    Pour ma DataGridView je souhaiterai avoir la somme de ma colonne "Quantité" dans un label placé sous la dernière ligne du DGV.

    Voici ce que j'ai trouvé pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim TotalQTE As Double
            Try
            For Each row As DataGridViewRow In DataGridView1.Rows
                TotalQTE = TotalQTE + row.Cells("QuantitéDataGridViewTextBoxColumn").Value
            Next
            Label1.Text = TotalQTE
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    Le calcul marche bien mais à chaque saisie j'ai le message d'erreur suivant :
    -> La conversion de la chaîne"" en type 'Double' n'est pas valide


    Comment obtenir la bonne chose ??

    Merci pour vos précieuse aide

    Cordialement,

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Salut,

    à première vue j'essayerais quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TotalQTE = TotalQTE + Cdbl(row.Cells("QuantitéDataGridViewTextBoxColumn").Value)

    je crois
    Mario

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    A tester (c'est en décimal... mais ça devrait marcher en double) :
    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
     
        Private Function CalculSomme(nomColonne As String) As Decimal
            'En entrée le Nom (propriété Name) de la colonne
            Dim Total As Decimal = 0
            'Evaluer toutes les rangées du tableau dans la colonne en cours
            For Each row As DataGridViewRow In DataGridView1.Rows
                'Récupération de la cellule
                Dim cellule As DataGridViewCell = DataGridView1.Item(nomColonne, row.Index)
                Try
                    'Récupération du contenu avec suppression du symbole €
                    Dim contenu As String = cellule.Value.ToString.Replace("€", "")
                    'Tentative de conversion en décimal
                    Dim valeur As Decimal
                    If Decimal.TryParse(contenu, valeur) = True Then
                        'Addition
                        Total += valeur
                    End If
                Catch ex As Exception
                    '
                End Try
            Next
            'En sortie le total (décimal)
            Return Total
        End Function

  4. #4
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Merci pour ta réponse super rapide mdevaux62, cela me fait super plaisir car tu a l'air de bien maîtriser la chose

    Pour ton code Mario cela ne fonctionne pas.

    mdevaux62, est-ce que "Total" dans ton exemple correspond au propriété Name de ma colonne ??

    Si c'est le cas j'ai donc ceci mais je n'ai aucun résultat dans un label :
    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
    Private Function CalculSomme(ByVal nomColonne As String) As Decimal
            'En entrée le Nom (propriété Name de la colonne) de la colonne
            Dim QuantitéDataGridViewTextBoxColumn As Decimal = 0
            'Evaluer toutes les rangées du tableau dans la colonne en cours
            For Each row As DataGridViewRow In DataGridView1.Rows
                'Récupération de la cellule
                Dim cellule As DataGridViewCell = DataGridView1.Item(nomColonne, row.Index)
                Try
                    'Récupération du contenu avec suppression du symbole €
                    Dim contenu As String = cellule.Value.ToString.Replace("€", "€")
                    'Tentative de conversion en décimal
                    Dim valeur As Decimal
                    If Decimal.TryParse(contenu, valeur) = True Then
                        'Addition
                        QuantitéDataGridViewTextBoxColumn += valeur
                    End If
                Catch ex As Exception
                    '
                End Try
            Next
            'En sortie le total (décimal)
            Return QuantitéDataGridViewTextBoxColumn
        End Function
    Si j'avais la possibilité de garder le symbole € sa serait le top (je n'y avais même pas penser car trop compliqué pour moi)

    Comment obtenir le résultat dans mon label1.text ??

    Merci beucoup

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Pas compliqué de mettre le résultat dans un label :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1.Text = CalculSomme("ColonneTotal").ToString
    Si on veut ce résultat au format monnaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1.Text = FormatMonnaie(CalculSomme("ColonneTotal"))
    Enfin, en combinant avec les deux autres sujets, ça donne ça :
    Un évènement _CellValueChanged qui calcule et affiche en plus dans Label1 la somme d'une colonne du Datagrid.
    Ce résultat est affiché au format monnaie.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
        Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If e.ColumnIndex < 0 Or e.RowIndex < 0 Then
                Exit Sub
            End If
            'Obtenir le composant
            Dim grid As DataGridView = DirectCast(sender, DataGridView)
            'Définir le nom des colonnes (à changer en fonction de tes propres paramètres)
            Dim colonneQuantite As String = "ColonneQuantite"
            Dim colonnePrixUnit As String = "ColonnePrixUnit"
            Dim colonneTotal As String = "ColonneTotal"
            'Obtenir la cellule et son contenu
            Dim cellule As DataGridViewCell = grid.Item(e.ColumnIndex, e.RowIndex)
            Dim contenuCellule As String = CStr(cellule.Value)
            'En fonction de la colonne où se trouve la cellule
            Dim nomColonne As String = grid.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case colonneQuantite
                    Try
                        'Calculer le total
                        Dim celluleMultiplicande As DataGridViewCell = grid.Item(colonnePrixUnit, e.RowIndex)
                        Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                        If celluleMultiplicande.Value.ToString <> "" Then
                            Try
                                Dim multiplicateur As Decimal = CDec(RectifierSeparateur(contenuCellule))
                                Dim multiplicande As Decimal = CDec(RectifierSeparateur(celluleMultiplicande.Value.ToString))
                                celluleTotal.Value = (multiplicande * multiplicateur).tostring
                            Catch ex As Exception
                                MessageBox.Show(ex.Message)
                            End Try
                        End If
                    Catch ex As Exception
                        '
                    End Try
                Case colonnePrixUnit
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim mutiplicande As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(mutiplicande)
                            'Calculer le total
                            Dim celluleMultiplicateur As DataGridViewCell = grid.Item(colonneQuantite, e.RowIndex)
                            Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                            If celluleMultiplicateur.Value.ToString <> "" Then
                                Try
                                    Dim multiplicateur As Decimal = CDec(RectifierSeparateur(celluleMultiplicateur.Value.ToString))
                                    celluleTotal.Value = (mutiplicande * multiplicateur).ToString
                                Catch ex As Exception
                                    MessageBox.Show(ex.Message)
                                End Try
                            End If
                        Catch ex As Exception
                            '
                        End Try
                    End If
                Case colonneTotal
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim total As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(total)
                            'Calculer la somme de la colonne Total et placer le résultat dans Label1
                            Label1.Text = FormatMonnaie(CalculSomme("ColonneTotal"))
                        Catch ex As Exception
                            '
                        End Try
                    End If
            End Select
        End Sub
     
        Private Function RectifierSeparateur(valeur As String) As String
            Dim separateur As String = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
            valeur = valeur.Replace(".", separateur)
            valeur = valeur.Replace(",", separateur)
            Return valeur
        End Function
     
        Private Function FormatMonnaie(valeur As Decimal) As String
            Return String.Format("{0:0.00} €", valeur)
        End Function
     
        Private Function CalculSomme(nomColonne As String) As Decimal
            'En entrée le Nom (propriété Name) de la colonne
            Dim Total As Decimal = 0
            'Evaluer toutes les rangées du tableau dans la colonne en cours
            For Each row As DataGridViewRow In DataGridView1.Rows
                'Récupération de la cellule
                Dim cellule As DataGridViewCell = DataGridView1.Item(nomColonne, row.Index)
                Try
                    'Suppression du symbole €
                    Dim contenu As String = cellule.Value.ToString.Replace("€", "")
                    'Tentative de conversion en décimal
                    Dim valeur As Decimal
                    If Decimal.TryParse(contenu, valeur) = True Then
                        'Addition
                        Total += valeur
                    End If
                Catch ex As Exception
                    '
                End Try
            Next
            'En sortie le total (décimal)
            Return Total
        End Function
    Sinon, il y avait une erreur dans ton code reporté précédemment.
    Ce n'est pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim contenu As String = cellule.Value.ToString.Replace("€", "€")
    Qui d'ailleurs ne sert à rien (!!!)

    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim contenu As String = cellule.Value.ToString.Replace("€", "")
    Cette erreur induisait sans doute l'absence de calcul..

  6. #6
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Encore une fois dans le mille mdevaux62

    Grace à toi j'avance à pas de géant pour mon projet de licence, je te remercie énormément car mon DatagGridview commence à ressembler à quelque chose

    Je m’aperçois que ce n'est vraiment pas évident de démarrer, je n'aurai jamais trouvé tous cela tout seul.

    MILLE MERCI

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

Discussions similaires

  1. [Débutant] sélèction et/ou somme de colonne dans labels DataGridview
    Par jeremyvb11 dans le forum VB.NET
    Réponses: 16
    Dernier message: 29/12/2012, 19h20
  2. Réponses: 7
    Dernier message: 25/01/2012, 14h25
  3. [HTML] Pb pour inserer une colonne dans un tableau
    Par cchampion2fr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 11/11/2006, 11h41
  4. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 09h09
  5. Réponses: 6
    Dernier message: 09/06/2006, 12h17

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