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 :

calculs dans datagrid [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut calculs dans datagrid
    Bonjour,

    Je suis entrain de faire un petit soft de gestion des ventes / du stock et j'aimerai savoir comment je pourrais faire un datacolumn qui calcule la moyenne des cellules de la ligne...

    merci d'avance à tous les forumeurs!

  2. #2
    Membre chevronné
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each row As DataGridViewRow In taDGV.Rows
                Dim total As Double
                For Each cell As DataGridViewCell In row.Cells
                    total += cell.Value
                Next
                row.Cells("ColumnResultat").Value = total / row.Cells.Count
            Next

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    merci!
    mais j'ai un petit soucis: j'ai cette erreur:
    "L'opérateur '+' n'est pas défini pour type 'Double' et type 'DBNull'."
    et comment fait-on pour lui dire de calculer sur les colones 2 à 5 (3° à 6°)?

    encore merci!

  4. #4
    Membre chevronné
    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
    Par défaut
    Essayes comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
           For Each row As DataGridViewRow In taDGV.Rows
                Dim total As Double
                For Each cell As DataGridViewCell In row.Cells
                    If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then
                        If Not IsDBNull(cell.Value) Then total += cell.Value
                    End If
                Next
                row.Cells("ColumnResultat").Value = total / 4
            Next

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    merci mais j'ai encore un soucis (padouwé, je sais...)
    ça à l'air de fonctionner jusqu'au moment ou il faut mettre dans la colonne, il me dit que la colonne n'existe pas...
    j'ai essayé avec une datacolumn et avec une colonne que j'ai mis dans la table de la bdd...

    mais si au lieu du nom de la colonne je marque son numéro, cela fonctionne mais la moyenne est juste seulement pour la première colonne
    ( si je mets 2 partout, moyenne de 2 sur la première ligne, 4 sur la seconde, 6 sur la troisième...)

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Et tu as une colonne nomméee "ColumnResultat" dans ton DGV "taDGV" ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Et tu as une colonne nomméee "ColumnResultat" dans ton DGV "taDGV" ?
    je l'avais nommé "moy" et modifié dans le code "columnresultat" par "moy"

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Peut-on voir ton code, y compris le designer du DGV ?
    Attention la casse est importante

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Peut-on voir ton code, y compris le designer du DGV ?
    Attention la casse est importante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            For Each row As DataGridViewRow In TestDataGridView.Rows
                Dim total As Double
                For Each cell As DataGridViewCell In row.Cells
                    If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then
                        If Not IsDBNull(cell.Value) Then total += cell.Value
                    End If
                Next
                row.Cells("moy").Value = total / 4
     
            Next
        End Sub
    http://imageshack.us/photo/my-images...tagridview.jpg
    voilà...
    bon faut pas faire attention à l'intitulé des autres colonnes, si je te demandais de 2 à 5, c'était juste pour savoir comment on fait...

    à ce propos, cellcount fonctionne aussi dans ce mode? parce que les ventes sont rentrées tous les jours et si on est au 2° jour et qu'on divise par 4 (exemple), cela n'est pas juste...

    je crois que je vais devoir faire un compteur pour toutes les cellules qui ne sont pas égales à null et dire de diviser par la variable de ce compteur
    encore merci de m'aider!

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    y compris le designer du DGV
    Et oui apriori le cellcount marche

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Et oui apriori le cellcount marche
    c'est pas l'image que j'ai mis en lien? connais pas super bien la terminologie...

    ou c'est le dataset que tu veux voir?
    ptet la modif des colonnes:

  12. #12
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Tu affiches tous les fichiers dans l'explorateur de solutions :

    Tu ouvre le fichier designer :


    Tu cherches la déclaration du datagridview et tu me colles ça ici

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    c'est ça?
    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
    'TestDataGridView
            '
            Me.TestDataGridView.AutoGenerateColumns = False
            Me.TestDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
            Me.TestDataGridView.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.DataGridViewTextBoxColumn1, Me.DataGridViewTextBoxColumn2, Me.DataGridViewTextBoxColumn3, Me.DataGridViewTextBoxColumn4, Me.DataGridViewTextBoxColumn5, Me.DataGridViewTextBoxColumn6, Me.DataGridViewTextBoxColumn7})
            Me.TestDataGridView.DataSource = Me.TestBindingSource
            Me.TestDataGridView.Location = New System.Drawing.Point(24, 84)
            Me.TestDataGridView.Name = "TestDataGridView"
            Me.TestDataGridView.Size = New System.Drawing.Size(811, 442)
            Me.TestDataGridView.TabIndex = 3
            '
            'DataGridViewTextBoxColumn1
            '
            Me.DataGridViewTextBoxColumn1.DataPropertyName = "ref"
            Me.DataGridViewTextBoxColumn1.HeaderText = "ref"
            Me.DataGridViewTextBoxColumn1.Name = "DataGridViewTextBoxColumn1"
            '
            'DataGridViewTextBoxColumn2
            '
            Me.DataGridViewTextBoxColumn2.DataPropertyName = "1"
            Me.DataGridViewTextBoxColumn2.HeaderText = "1"
            Me.DataGridViewTextBoxColumn2.Name = "DataGridViewTextBoxColumn2"
            '
            'DataGridViewTextBoxColumn3
            '
            Me.DataGridViewTextBoxColumn3.DataPropertyName = "2"
            Me.DataGridViewTextBoxColumn3.HeaderText = "2"
            Me.DataGridViewTextBoxColumn3.Name = "DataGridViewTextBoxColumn3"
            '
            'DataGridViewTextBoxColumn4
            '
            Me.DataGridViewTextBoxColumn4.DataPropertyName = "3"
            Me.DataGridViewTextBoxColumn4.HeaderText = "3"
            Me.DataGridViewTextBoxColumn4.Name = "DataGridViewTextBoxColumn4"
            '
            'DataGridViewTextBoxColumn5
            '
            Me.DataGridViewTextBoxColumn5.DataPropertyName = "4"
            Me.DataGridViewTextBoxColumn5.HeaderText = "4"
            Me.DataGridViewTextBoxColumn5.Name = "DataGridViewTextBoxColumn5"
            '
            'DataGridViewTextBoxColumn6
            '
            Me.DataGridViewTextBoxColumn6.DataPropertyName = "5"
            Me.DataGridViewTextBoxColumn6.HeaderText = "5"
            Me.DataGridViewTextBoxColumn6.Name = "DataGridViewTextBoxColumn6"
            '
            'DataGridViewTextBoxColumn7
            '
            Me.DataGridViewTextBoxColumn7.DataPropertyName = "moy"
            Me.DataGridViewTextBoxColumn7.HeaderText = "moy"
            Me.DataGridViewTextBoxColumn7.Name = "DataGridViewTextBoxColumn7"

  14. #14
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    et voilà ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGridViewTextBoxColumn7.Name = "DataGridViewTextBoxColumn7"
    C'est ça le nom de ta colonne, moy c'est juste l'affichage ...

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    Citation Envoyé par asmduty Voir le message
    et voilà ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGridViewTextBoxColumn7.Name = "DataGridViewTextBoxColumn7"
    C'est ça le nom de ta colonne, moy c'est juste l'affichage ...
    je me suis fait avoir par le mode graphique qui indiquait name: moy (sur la 2° capture d'écran..) mais c'est datapropertyname...
    merci!

    autrement, tu aurais une idée pour le fait que la moyenne passe automatiquement à la ligne d'après? (comme j'expliquais plus haut, si je mets 2 partout sur 3 lignes, la moyenne est : 2 sur la 1° ligne, 4 sur la 2° ligne et 6 sur la 3° ligne...)

  16. #16
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    La c'est plus une question de logique qu'un problème de programmation, à toi donc d'y réfléchir.

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    ok, je vais encore essayer de trouver ce qu'il se passe...

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Par défaut
    alors, j'ai trouvé une solution qui doit pas être la plus belle:
    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 Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            For Each row As DataGridViewRow In TestDataGridView.Rows
                Dim compt As Double
                For Each cell As DataGridViewCell In row.Cells
                    If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then
                        If Not IsDBNull(cell.Value) Then compt += 1
     
                    End If
     
                Next
                row.Cells(0).Value = compt
                compt = 0
     
            Next
            For Each row As DataGridViewRow In TestDataGridView.Rows
                Dim total As Double
                For Each cell As DataGridViewCell In row.Cells
                    If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then
                        If Not IsDBNull(cell.Value) Then total += cell.Value
                    End If
                Next
                row.Cells(6).Value = total / row.Cells(0).Value
                total = 0
     
            Next
        End Sub
    (la première partie est le compteur qui retire les cellules vides pour permettre de faire le calcul de la moyenne en divisant par le nombre de ventes)
    donc, avant que l'on rentre des données, le compt et la moyenne contiennent un nombre (je n'ai pas encore compris d'où il vient) mais lorsque l'on rentre les ventes, le compt et la moyenne sont modifiés par les corrects.
    sans que je ne change quoi que ce soit, maintenant, ça indique tjs les bons chiffres...
    merci énormément de votre aide!

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

Discussions similaires

  1. [VB.NET] calcul dans datagrid
    Par maleck100 dans le forum Débuter
    Réponses: 0
    Dernier message: 12/08/2013, 00h46
  2. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03
  3. Réponses: 8
    Dernier message: 14/05/2004, 11h18
  4. Calcul dans des champs de saisie
    Par leeloo076 dans le forum ASP
    Réponses: 4
    Dernier message: 07/04/2004, 10h09
  5. calcul dans une requête
    Par blaz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/12/2003, 10h31

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