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

Windows Forms Discussion :

Rétablir la valeur d'une cellule de DataGridView après CellValueChanged


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Par défaut Rétablir la valeur d'une cellule de DataGridView après CellValueChanged
    Bonjour,

    Dans mon application, un utilisateur dispose d'un DataGridView. Dans ce DataGridView, il a une colonne éditable où il doit strictement saisir un décimal.

    Afin de vérifier cette saisie, j'ai inscris mon DataGridView à l'évènement CellValueChanged. A chaque modification de valeur, je vérifie via une expression régulière si la saisie est correcte.

    Si ce n'est pas le cas, je souhaiterais rétablir la situation initiale en annulant la saisie de l'utilisateur (son caractère qui ne répond pas aux critères de mon expression régulière). Le problème est que je n'arrive pas à modifier la valeur de ma cellule dynamiquement.

    Je précise que mon DataGridView est relié à un DataTable.

    Voici mon code actuel dans l'évènement CellValueChanged (je ne vous met pas tout) :

    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
     
    coeff = dgvr.Cells[3].Value.ToString();
    if (!System.Text.RegularExpressions.Regex.IsMatch(coeff, @"^\d{1,5}\,?\d{0,2}$"))
    {
    	_FragmentDataGridView.CellValueChanged -= _FragmentDataGridView_CellValueChanged;
     
    	// Suppression du dernier caractère
    	if (coeff.Length > 1)
    		dgvr.Cells[3].Value = coeff.Substring(0, coeff.Length - 1);
    	else
    		dgvr.Cells[3].Value = "";
     
    	// Tentative de refraichissement du DataGridView en veillant a desinscrire le composant à mon evenement
    	dgvr.Cells[3].DataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
    	dgvr.Cells[3].DataGridView.RefreshEdit();
    	_FragmentDataGridView.CellValueChanged += _FragmentDataGridView_CellValueChanged;
     
    	return;
    }
    dgvr est ma cellule concernée dans mon DataGridView.

    Merci pour vos réponses!

  2. #2
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Tu dois utiliser les event cellBeginedit et cellendedit plutot que valuechanged

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    L'évènement CellValidating sert justement à gérer ce genre de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void _FragmentDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        if (!IsValid(e.FormattedValue))
        {
            e.Cancel = true;
        }
    }
    L'évènement se produit lors de la validation de la saisie, par exemple lorsque la cellule perd le focus, avant que la valeur ne soit effectivement modifiée dans la DataTable. Le fait de mettre e.Cancel à true invalide la valeur saisie, et le focus reste sur la cellule.

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Tomlev

    Bon a savoir !
    J'avais toujours utilisé les begin edit et endedit pour faire ca !

  5. #5
    Membre confirmé Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Par défaut
    Alors le CellValidating répond en partie à ma question car il empêche bien l'utilisateur de sortir de la cellule du DataGridView avant d'avoir la bonne saisie, c'est déjà un bon point.

    Cependant, le e.cancel n'annule pas la saisie. Savez-vous comment modifier la saisie à la volée dans la cellule du DataGridView?

    Merci pour vos retours.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu peux appeler la méthode CancelEdit sur le DGV. Par contre ça met aussi fin au mode d'édition, je sais pas si c'est ce que tu veux...

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

Discussions similaires

  1. je veux récupérer la valeur d'une cellule dans datagridview
    Par yassine-art dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/04/2013, 10h27
  2. Réponses: 2
    Dernier message: 29/07/2010, 20h51
  3. DataGridView changer la valeur d'une cellule vb2008
    Par chahinaz21 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/11/2009, 16h56
  4. Réponses: 1
    Dernier message: 06/06/2009, 22h35
  5. [vb2005]Tester la valeur d'une cellule d'un datagridview
    Par stargates dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2006, 10h09

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