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 :

sélèction et/ou somme de colonne dans labels DataGridview [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    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
    Par défaut sélèction et/ou somme de colonne dans labels DataGridview
    Grace à mdevaux62 j'ai vu qu'il était possible d'obtenir la somme d'une colonne dans label grâce à ce raisonnement :

    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

    Je me demandais si il était possible d'afficher la valeur et/ou la somme (si plusieurs ligne sont sélectionnées) le tout dans un label ??

    Admettons que je selectionne ma colonne "Prix"le label en question me retourne la valeur de ma ligne.
    Puis si je sélectionne plusieurs lignes et là j'obtiendrai la somme des lignes séletionnées.

    Un peu comme à la Excel

    Cela super intéressant pour mon projet d'étude

    Ce genre de chose est-il réalisable ou pas dutout ??
    (PS: J'éspère que mdvaux62 passera par ici car il est porteur de très bon conseil )

    Merci à vous pour vos conseils qui vale de l'or

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Il te suffit sur l'évènement .SelectionChanged de parcourir les .SelectedRows de ton DataGrid et d'additionner les valeurs de la colonne que tu veux

    Style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub CalculSomme(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
            Dim _total As Double = 0
            For Each _row As DataGridViewRow In DataGridView1.SelectedRows
                If Not _row.Cells(0).Value = Nothing Then
                    _total = _total + Double.Parse(_row.Cells(0).Value.ToString)
                End If
            Next
            lblSomme.Text = _total.ToString
    End Sub
    Bon dev

  3. #3
    Membre très actif
    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
    Par défaut
    mon choix de colonne intervient ou dans ton exemple ?

    Je suis en train d'essayer tout cela malgrés mon faible bagage

    Voici le genre d'erreur que j'obtiens :
    Le format de la chaine du style est incorrect

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Pardon pour le code mal commenté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Not _row.Cells(0).Value = Nothing Then
           _total = _total + Double.Parse(_row.Cells(0).Value.ToString)
    End If
    Le 0 dans .Cells() indique l'index de la colonne.
    Tu peux le remplacer par le nom de ta colonne directement.

    A moins que je n'ai pas compris ce que tu souhaitais faire, ça fonctionne si on sélectionne différentes lignes.

  5. #5
    Membre très actif
    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
    Par défaut
    Oui c'est tout à fait cela

    j'avais bien remplacer mon Cell(0) par ma colonne en question mais j'avais oublié de le mettre dans l’évènement selectchanged

    Alors pour ceux a qui sa interrèsse voici mon bout de code permettant d'obtenir la valeur ou la somme de 3 colonnes : Quantité; Prixu et TotalEuros

    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
    Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
     
            'PERMET D'AFFICHER LA VALEUR OU LE TOTAL D'UNE COLONNE
     
            Try
                'Colonne Quantité
                Dim _Quantité As Double = 0
                For Each _row As DataGridViewRow In DataGridView1.SelectedRows
                    If Not _row.Cells(0).Value = Nothing Then
                        _Quantité = _Quantité + Double.Parse(_row.Cells(5).Value.ToString)
                    End If
                Next
                Label8.Text = _Quantité.ToString
            Catch ex As Exception
                '
            End Try
     
            Try
                'Colonne Prix u:
                Dim _Prixu As Double = 0
                For Each _row As DataGridViewRow In DataGridView1.SelectedRows
                    If Not _row.Cells(0).Value = Nothing Then
                        _Prixu = _Prixu + Double.Parse(_row.Cells(7).Value.ToString)
                    End If
                Next
                Label11.Text = _Prixu.ToString
            Catch ex As Exception
                '
            End Try
     
            Try
                'Colonne Total Eruos:
                Dim _TotalEuros As Double = 0
                For Each _row As DataGridViewRow In DataGridView1.SelectedRows
                    If Not _row.Cells(0).Value = Nothing Then
                        _TotalEuros = _TotalEuros + Double.Parse(_row.Cells(8).Value.ToString)
                    End If
                Next
                Label16.Text = _TotalEuros.ToString
            Catch ex As Exception
                '
            End Try
     
     
        End Sub

    Le problème auquel je suis confronté maintenant c'est que pour ma 3eme colonne "Total" cela ne fonctionne pas car les données sont sous la forme : FormatMonnaie (voir code de mdevaux cité plus haut) avec le symbole euros derrière (exemple : 640,00 €)

    Le "Try" me permet de lever les exceptions lié au flèche montante et descendante du clavier....

    Il y a t'il une solution pour tout de même récuperer mes valeurs de cette colonne "Total" ??

    Merci

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Tu n'as pas finis de poser des questions???? Je peux plus regarder la télé

    Alors, le contenu de tes cellules est une chaîne de caractères (String oblige).

    Avec la fonction LTrim, RTrim ou .Remove, tu dois pouvoir récupérer que la partie de gauche de ta chaîne - les deux caractères de fin (l'espace et le symbole monétaire), ensuite tu fait ton calcul et le tour et joué

    Si tu le fais avec le code que je t'ai proposé précédement, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CalculSomme(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
            Dim _total As Double = 0
            For Each _row As DataGridViewRow In DataGridView1.SelectedRows
                Dim _Valeur As String = _row.Cells("Ma_Colonne_A_Additionner_Avec_Format_Monétaire").Value.ToString
                If Not String.IsNullOrEmpty(_Valeur) Then
                    _total = _total + Double.Parse(_Valeur.Remove(_Valeur, 2))
                End If
            Next
            lblSomme.Text = _total.ToString
        End Sub
    Parcontre, dans le code que tu as mis dans ton post précédent, je pense qu'il y a une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Not _row.Cells(0).Value = Nothing Then
       _Quantité = _Quantité + Double.Parse(_row.Cells(5).Value.ToString)
    End If
    La référence de la colonne n'est pas la même dans les .Cells().

    Voilà.

    Ps: Comme il n'y a rien d'interressant à la télé, je peux encore te répondre

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/10/2009, 11h40
  2. Réponses: 6
    Dernier message: 17/06/2008, 11h28
  3. Réponses: 5
    Dernier message: 28/05/2008, 10h45
  4. Réponses: 1
    Dernier message: 06/10/2007, 14h59
  5. [C#][VS 2005]Supprimer la première colonne dans un DatagridView
    Par cmoiscrat dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/06/2006, 15h20

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