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 :

datagridview.cellvaluechanged sur une partie du datagridview [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 datagridview.cellvaluechanged sur une partie du datagridview
    Bonjour à tous!
    alors, voilà, petite question, savez-vous si il est possible de faire un cellvaluechanged sur seulement une partie du datagridview?
    et si c'est possible, comment faire?

    merci d'avance!

  2. #2
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Bonjour,

    Cela n'est pas possible de base, tu devras implémenter l'évènement pour toute la datagrid et tester à l'intérieur si la cellule modifiée est dans la colonne que tu souhaites (ou la ligne).

    Si par exemple, tu veux une action uniquement si la cellule modifiée est dans la première colonne, cela donnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub dgv_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellValueChanged
            If e.ColumnIndex = 0 Then
                'Ton traitement
            End If
    End Sub

  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
    Citation Envoyé par Gurdil le nain Voir le message
    Bonjour,

    Cela n'est pas possible de base, tu devras implémenter l'évènement pour toute la datagrid et tester à l'intérieur si la cellule modifiée est dans la colonne que tu souhaites (ou la ligne).

    Si par exemple, tu veux une action uniquement si la cellule modifiée est dans la première colonne, cela donnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub dgv_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellValueChanged
            If e.ColumnIndex = 0 Then
                'Ton traitement
            End If
    End Sub
    donc il suffit que je rajoute ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If e.ColumnIndex = 0 Then
    pour lui demander de n'agir qu'en cas de modifs sur cette colonne (suivant l'exemple)... je teste ça de suite, merci!

  4. #4
    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 énormément!
    cela fonctionne du tonnerre!!

  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
    euh, juste une question, est-il possible de ne le faire que pour la ligne active? parce que j'ai un fichier de +/- 250 lignes sur 34 colonnes de données à rentrer et c'est plutôt long de faire les calculs sur toutes les lignes à chaque fois (15-20sec sur un cpu E-350...)

    mon 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
    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
    104
    105
    106
    107
    108
    Private Sub CellValueChanged(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) Handles PériodesDataGridView.CellValueChanged
     
            If e.ColumnIndex >= 3 AndAlso e.ColumnIndex <= 36 Then
                'compteur nombre de jours pour moyenne
                For Each row As DataGridViewRow In PériodesDataGridView.Rows
                    Dim compt As Double
                    For Each cell As DataGridViewCell In row.Cells
                        If cell.ColumnIndex >= 3 AndAlso cell.ColumnIndex <= 36 Then
                            If Not IsDBNull(cell.Value) Then compt += 1
     
                        End If
     
                    Next
                    row.Cells(46).Value = compt
                    compt = 0
     
                Next
                'calcul de la moyenne
                For Each row As DataGridViewRow In PériodesDataGridView.Rows
                    Dim total As Double
                    For Each cell As DataGridViewCell In row.Cells
                        If cell.ColumnIndex >= 3 AndAlso cell.ColumnIndex <= 36 Then
                            If Not IsDBNull(cell.Value) Then total += cell.Value
                        End If
                    Next
                    row.Cells(37).Value = total
                    row.Cells(38).Value = total / row.Cells(46).Value
                    total = 0
     
                Next
                'calcul de l'écart
                For Each row As DataGridViewRow In PériodesDataGridView.Rows
     
                    For Each cell As DataGridViewCell In row.Cells
     
                        If IsDBNull(row.Cells(39).Value) Then
     
                            row.Cells(40).Value = 0
     
     
                        Else
                            row.Cells(40).Value = row.Cells(39).Value - row.Cells(37).Value
                        End If
                    Next
     
                Next
                'calcul du nombre de jours
                For Each row As DataGridViewRow In PériodesDataGridView.Rows
     
                    For Each cell As DataGridViewCell In row.Cells
     
                        If IsDBNull(row.Cells(40).Value) Or IsDBNull(row.Cells(38).Value) Then
                            row.Cells(41).Value = ""
                        Else
                            row.Cells(41).Value = row.Cells(40).Value / row.Cells(38).Value
                        End If
     
                    Next
     
                Next
                'pour calcul ok depan
                For Each row As DataGridViewRow In PériodesDataGridView.Rows
     
                    For Each cell As DataGridViewCell In row.Cells
     
                        If IsDBNull(row.Cells(40).Value) Then
                            row.Cells(45).Value = "pas de moyenne"
     
                        Else
     
                            row.Cells(45).Value = row.Cells(40).Value - (row.Cells(44).Value * row.Cells(38).Value)
     
                        End If
     
                    Next
     
                Next
                'affichage ok, dépannage
                For Each row As DataGridViewRow In PériodesDataGridView.Rows
     
                    For Each cell As DataGridViewCell In row.Cells
     
                        If row.Cells(45).Value < 1 Then
                            row.Cells(42).Value = "Dépannage"
     
                            'ElseIf row.Cells(14).Value < TextBox1.Text + 2 And row.Cells(14).Value > TextBox1.Text Then
                            'row.Cells(15).Value = "attention"
                        Else
                            row.Cells(42).Value = "ok"
                        End If
                    Next
     
                Next
                'reste
                For Each row As DataGridViewRow In PériodesDataGridView.Rows
     
                    For Each cell As DataGridViewCell In row.Cells
     
                        row.Cells(43).Value = (row.Cells(40).Value - (row.Cells(44).Value * row.Cells(38).Value)) / 10
     
                    Next
     
                Next
     
            End If
     
        End Sub

  6. #6
    Membre chevronné
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Par défaut
    Si tu veux mettre à jour le calcul seulement sur la ligne modifiée, travaille avec Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each row As DataGridViewRow In PériodesDataGridView.Rows
       (...)
    Next
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim  row As DataGridViewRow
    row =  PériodesDataGridView.Rows(e.RowIndex)
    (...)
    Ainsi tu ne traite que la ligne qui a subi une modification.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/03/2013, 13h29
  2. Evénement sur une cellule de DataGridView
    Par sepullayer dans le forum C++/CLI
    Réponses: 2
    Dernier message: 27/03/2009, 15h52
  3. Lier le comportement de 2 combobox sur une ligne de datagridview
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 0
    Dernier message: 16/03/2009, 16h03
  4. Réponses: 5
    Dernier message: 06/09/2005, 16h01
  5. Changement de couleur de police sur une partie d'un caption
    Par kobe dans le forum Composants VCL
    Réponses: 3
    Dernier message: 11/07/2005, 10h18

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