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 :

Changement de cellule dans un datagridview [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut Changement de cellule dans un datagridview
    Bonjour a tous,

    Cela fait depuis tôt ce matin que j'essaye ceci:

    Dans un datagridview, lorsque je place des données dan une cellule, si je fait Enter pour validé et changer de cellule , je me retrouve systématiquement sur la ligne suivante
    Hors je voudrais que lorsque je tape Enter , le curseur aille a la colonne suivante de la même ligne. Mais rien n'y fait, je suis toujours sur la ligne en dessous:

    Un petit coup de pouce...

    Merci d'avance du coup de main

  2. #2
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut
    Bonjour

    Tu peux essayer quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub DGV_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DGV.KeyDown
                    If e.KeyCode = Keys.Enter Then e.Handled = True
                    Me.DGV.CurrentCell = Me.DGV.Item(Me.DGV.CurrentCell.ColumnIndex + 1, Me.DGV.CurrentCell.RowIndex)
    End Sub
    A+

  3. #3
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Merci pour la réponse, mais je suis au même point, lorsque je tape sur ENTER je passe a la ligne en dessous
    J'avais déjà pensé a cela et à supressKeyPress

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut
    Es ce que tu peux nous transmettre ton code souce ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Webplanneur
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Par défaut Essai
    Bonjour,

    Faite une nouvelle class intitulée "DataEnterGridView.vb" et mettre le code ci-dessous
    Regénérer
    Prendre un nouveau composant datagridviewEnter dans la boite à outil,
    le mettre sur le formulaire et ajouter les colonnes ou choisir une source de données.


    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    Public Class DataEnterGridView
        Inherits DataGridView
     
        Private _col As Integer
     
        Public Overridable Property col As Integer
            Get
                Return _col
            End Get
            Set(ByVal value As Integer)
                Me._col = value
            End Set
        End Property
     
        Private _row As Integer
     
        Public Overridable Property row As Integer
            Get
                Return _row
            End Get
            Set(ByVal value As Integer)
                Me._row = value
            End Set
        End Property
     
        Protected Overloads Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
     
            Try
     
                If keyData = Keys.Enter Then
                    ChercheTypCol()
     
                    Return True
     
                End If
     
                If keyData = Keys.Back Then
                    Dim canGoBack As Boolean = True
                    If Not (Me.EditingControl Is Nothing) Then
                        If TypeOf Me.EditingControl Is TextBox Then
                            Dim tx As TextBox = CType(Me.EditingControl, TextBox)
                            If Not (tx.SelectionStart = 0) Then
                                canGoBack = False
                            End If
                        End If
                    End If
     
     
     
                    If row = 0 AndAlso col = 0 Then
                        canGoBack = False
                    End If
                    If canGoBack Then
                        If col = 0 Then
     
                            col = Me.Columns.Count - 1
                            row += 1
                        Else
                            col -= 1
                        End If
                        Me.CurrentCell = Me(col, row)
                        Return True
                    End If
                End If
     
                If keyData = Keys.Clear Then
                    Me.CurrentCell = Me(col, row)
     
                End If
     
            Catch ex1 As ArgumentOutOfRangeException
     
            Catch ex As InvalidOperationException
     
            End Try
     
            Return MyBase.ProcessDialogKey(keyData)
     
        End Function
     
     
     
        Protected Overloads Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean
     
     
            If e.Control AndAlso e.KeyCode = Keys.Left Then
                Return Me.ProcessLeftKey(e.KeyCode)
            End If
     
            If e.Control AndAlso e.KeyCode = Keys.Right Then
                Return Me.ProcessRightKey(e.KeyCode)
            End If
     
            If e.KeyCode = Keys.Up OrElse e.KeyCode = Keys.Down _
    OrElse e.KeyCode = Keys.Left OrElse e.KeyCode = Keys.Right Then
                Return False
            End If
     
            Return MyBase.ProcessDataGridViewKey(e)
     
     
        End Function
     
     
        Protected Overloads Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)
     
            If e.KeyData = Keys.Enter Then
                Try
                    ChercheTypCol()
                    ' ChangeLigneCol()
     
                Catch ex As InvalidOperationException
     
                Catch ex1 As ArgumentOutOfRangeException
     
                End Try
                e.Handled = True
     
            End If
     
            MyBase.OnKeyDown(e)
     
     
        End Sub
     
        Private Sub ChangeLigneCol()
     
            Try
                'si ce n'est pas une nouvelle ligne
                If Not (row = Me.NewRowIndex) Then
                    'Si c'est  la derniere colonne
                    If col = (Me.Columns.Count - 1) Then
                        'Remettre sur la premiere colonne index 0
                        col = -1
                        row += 1
                        'si la colonne est invisible alors changer de colonne
                        For i As Integer = 0 To (Me.Columns.Count - 1)
                            If Me.Item((col + 1), row).Visible Then
                                'si la colonne est visible sortir
                                Exit For
                            End If
                            col += 1
                        Next
                    End If
                End If
     
                'cherche si la colonne est visible (peut être non visible n'importe ou dans le datagridview)
                For i As Integer = 0 To (Me.Columns.Count - 1)
     
                    If Me.Item((col + 1), row).Visible Then
                        'si la colonne est invisible alors changer de colonne
                        Exit For
                    End If
                    col += 1
                Next
     
                'envoie la cellule suivante
                Me.CurrentCell = Me(col + 1, row)
     
            Catch ex As ArgumentOutOfRangeException
     
            End Try
     
        End Sub
     
        Private Sub ChercheTypCol()
     
            Try
                Me._col = Me.CurrentCell.ColumnIndex
                Me._row = Me.CurrentCell.RowIndex
     
                'cherche si la colonne est visible ou en lecture seule (peut être non visible n'importe ou dans le datagridview)
                For i As Integer = 0 To (Me.Columns.Count - 1)
                    If Me.Item((col + 1), row).Visible OrElse Me.Item((col + 1), row).ReadOnly Then
                        'si la colonne est invisible alors changer de colonne
                        Exit For
                    End If
                    col += 1
                Next
     
            Catch ex As ArgumentOutOfRangeException
                'si le compte des colonnes est superieure renvoyer la premiere ligne
                col = -1
                row += 1
     
            Finally
                ChangeLigneCol()
            End Try
     
        End Sub
     
        Overloads Sub SelectNextControl()
            Throw New NotImplementedException
        End Sub
     
    End Class

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,

    avec une rapide recherche google : datagridview enter key next cell vb.net
    J'ai trouvé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
                If e.KeyCode = Keys.Enter Then
                    e.SuppressKeyPress = True
                    Dim iCol = DataGridView1.CurrentCell.ColumnIndex
                    Dim iRow = DataGridView1.CurrentCell.RowIndex
                    If iCol = DataGridView1.Columns.Count - 1 Then
                        If iRow < DataGridView1.Rows.Count - 1 Then
                            DataGridView1.CurrentCell = DataGridView1(0, iRow + 1)
                        End If
                    Else
                        DataGridView1.CurrentCell = DataGridView1(iCol + 1, iRow)
                    End If
                End If
            End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       Private Sub DataGridView1_CellEndEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            Dim iCol = DataGridView1.CurrentCell.ColumnIndex
            Dim iRow = DataGridView1.CurrentCell.RowIndex
            If iCol = DataGridView1.Columns.Count - 1 Then
                If iRow < DataGridView1.Rows.Count - 1 Then
                    DataGridView1.CurrentCell = DataGridView1(0, iRow + 1)
                End If
            Else
                If iRow < DataGridView1.Rows.Count - 1 Then
                    SendKeys.Send("{up}")
                End If
                DataGridView1.CurrentCell = DataGridView1(iCol + 1, iRow)
                End If
        End Sub
    A tester...

  7. #7
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Bonjour Oliv


    Essais du code (très complet)

    il fonctionne temps que je ne passe pas en mode édition de la cellule
    Si je fais ENTER sur chaque cellule directement , pas de problème
    mais si passe en mode édition, lorsque je valide par ENTER la cellule suivante est celle du dessous, hors je voudrais passer a la colonne suivante a droite (col+1)

    merci de ton aide

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

Discussions similaires

  1. Clignoter une cellule dans un DataGridView
    Par amirad dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/09/2009, 19h23
  2. Format de cellules dans un DataGridView
    Par l0quito dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/08/2008, 13h11
  3. Fusion de cellules dans un DataGridView
    Par ZuoYue dans le forum C#
    Réponses: 1
    Dernier message: 08/11/2007, 18h03
  4. Réponses: 3
    Dernier message: 19/08/2007, 02h04
  5. [VBA]lancer une macro à chaque changement de cellule dans une feuille
    Par freddddd dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/05/2007, 13h58

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