Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre à l'essai
    Homme Profil pro jeremy
    developpeur
    Inscrit en
    décembre 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Nom : Homme jeremy
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2011
    Messages : 113
    Points : 22
    Points
    22

    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 :
    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
    427
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : février 2006
    Messages : 427
    Points : 179
    Points
    179

    Par défaut

    Salut,

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

    Code :
    TotalQTE = TotalQTE + Cdbl(row.Cells("QuantitéDataGridViewTextBoxColumn").Value)

    je crois
    Mario

  3. #3
    Membre actif
    Profil pro Michel Devaux
    Inscrit en
    janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Nom : Michel Devaux

    Informations forums :
    Inscription : janvier 2010
    Messages : 104
    Points : 181
    Points
    181

    Par défaut

    A tester (c'est en décimal... mais ça devrait marcher en double) :
    Code :
    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 à l'essai
    Homme Profil pro jeremy
    developpeur
    Inscrit en
    décembre 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Nom : Homme jeremy
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2011
    Messages : 113
    Points : 22
    Points
    22

    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 :
    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 Michel Devaux
    Inscrit en
    janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Nom : Michel Devaux

    Informations forums :
    Inscription : janvier 2010
    Messages : 104
    Points : 181
    Points
    181

    Par défaut

    Pas compliqué de mettre le résultat dans un label :
    Code :
    Label1.Text = CalculSomme("ColonneTotal").ToString
    Si on veut ce résultat au format monnaie :
    Code :
    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 :
    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 :
    Dim contenu As String = cellule.Value.ToString.Replace("€", "€")
    Qui d'ailleurs ne sert à rien (!!!)

    Mais :
    Code :
    Dim contenu As String = cellule.Value.ToString.Replace("€", "")
    Cette erreur induisait sans doute l'absence de calcul..

  6. #6
    Membre à l'essai
    Homme Profil pro jeremy
    developpeur
    Inscrit en
    décembre 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Nom : Homme jeremy
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2011
    Messages : 113
    Points : 22
    Points
    22

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •