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 :

Détecter une modification opérée par l’utilisateur dans une cellule de datagridview


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Par défaut Détecter une modification opérée par l’utilisateur dans une cellule de datagridview
    Bonjour, c’est encore moi
    Décidément, même les choses que je pensais simples me posent problème en ce moment.

    Dans une form, j’ai un premier DGV que l’utilisateur ne peut pas modifier. En cliquant sur une ligne de ce DGV s’affiche dans un second DGV juste au-dessous les détails de cette ligne. Là, par contre, l’utilisateur peut faire des modifs et je voudrais justement détecter les éventuelles modifications.

    Mon code pour charger le deuxième DGV est le suivant:

    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
     
         conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\Data.mdb;")
     
            da1 = New OleDbDataAdapter("SELECT ID, Pos, Objet, Nbre, Unite, Prix, Pourcent, ROUND((Nbre * Prix * Pourcent / 100), 2) AS Net FROM TblPos WHERE ID Like '" & Me.DGV1.SelectedCells(2).Value & "'", conn)
     
            Dim cb As New OleDbCommandBuilder(da1)
            ds1 = New DataSet
     
            conn.Open()
            da1.Fill(ds1, "pos")
            conn.Close()
     
            DGV3.DataSource = Nothing
            DGV3.DataMember = "Unterpos"
     
            DGV3.DataSource = ds1
    Pour actualiser le DGV3 je fais comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          Dim dv1 As New DataView(ds1.Tables("pos"))
            Dim drv1 As DataRowView = dv1(DGV3.CurrentRow.Index)
     
            Dim cb As New OleDbCommandBuilder(da1)
            conn.Open()
            da1.Update(ds1, "pos")
            conn.Close()
    Puis je charge à nouveau le DGV3 pour voir actualiser le résultat du calcul.
    Je suis pas sûr que ce soit très "propre" mais bon, ça fonctionne.

    Je pensais détecter les modifs de cellule avec un truc du genre cellvaluechanged, mais le problème est que ça se déclenche à chaque changement de ligne quand le DGV3 est à nouveau chargé. Comment faire pour que l’événement ne se déclenche que lorsque l’utilisateur change le contenu de la cellule ??

    Merci merci merci !

    Guillaume

  2. #2
    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
    Bonsoir,

    Votre problème est de différencier les modifications de cellules exécutées par le code des modifications apportées par l'utilisateur. A ma (maigre) connaissance, cette différenciation n'est pas prévue.

    Définissez une variable comme suit, en début de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class Form1
        Dim stop_events As Boolean = False
    Dans l'évènement CellValueChanged (par exemple), contrôlez l'état de cette variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub DataGridView3_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If stop_events = True Then Return ' Ne pas tenir compte de la modification
     
            ' (...)
            ' Placez ici votre code de traitement de l'évènement
            ' (...)
     
        End Sub
    Lorsque vous provoquez des modifications de cellules dans votre code, prévenez votre application qu'elle ne doit pas faire attention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            stop_event=True    ' Stopper le traitement
            DGV3.DataSource = Nothing
            DGV3.DataMember = "Unterpos"
            DGV3.DataSource = ds1
            stop_event=False    ' Reprendre le traitement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Par défaut
    Merci beaucoup Franticfranz,

    C’est une bon moyen d’arriver à ce que je veux, je n’y avais pas pensé. Ça marche très bien.
    Par contre, j’ai un souci pour actualiser mon datagridview quand il a le focus, je suis obligé de faire passer le focus sur un autre élément, actualiser le DGV puis repasser le focus dessus. Je ne sais pas pourquoi, ça ne fonctionne pas sinon.

    Guillaume

Discussions similaires

  1. [Compiler] Modification de fichiers .txt dans une application faite par Compiler
    Par maxcentrale dans le forum MATLAB
    Réponses: 9
    Dernier message: 12/03/2014, 17h16
  2. Réponses: 8
    Dernier message: 05/12/2008, 11h43
  3. Réponses: 2
    Dernier message: 24/03/2008, 11h35
  4. Afficher une fiche client par selection dans une Liste
    Par Pascal26 dans le forum WinDev
    Réponses: 2
    Dernier message: 10/04/2007, 11h16
  5. Réponses: 1
    Dernier message: 02/11/2006, 09h25

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