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 :

[VB.NET2005]DataGridView : Formatter la saise


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Par défaut [VB.NET2005]DataGridView : Formatter la saise
    Bonjour à tous,
    J'utilise un controle datagradview sans me baser sur une base de données, seulement pour afficher des valeurs et pouvoir les éditer manuellement.
    Les valeurs entrées doivent être un entier positif. Or, je n'arrive à empecher l'utilisateur d'entrer des caractères autres que des chiffres. Je pourrais bien sur mettre les cellules en ReadOnly et utiliser un textbox pour faire les véfirifcations mais je ne trouve pas cela très pratique.
    De plus, j'aimerais afficher une astérisque derrière le nombre de certaines cases mais que lorsque l'utilisateur édite une case, il ne voie que la valeur numérique et non la valeur + l'astérisque.
    Si vous pouviez m'orienter un peu, cela me serait d'une grande aide

    Merci d'avance,
    Nicolas

  2. #2
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    je pense que tu peux utiliser l'evenement current cell changed de ton datagrid, à chaque fois que l'utilisateur va saisir quelque chose dans une cellule, l'evenement va etre déclenché, il faut que tu verifie a ce moment là si la valeur entrée est numérique

    propriete currentcell :

    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemwindowsformsdatagridclasscurrentcelltopic.asp

    evenement currentcellchanged

    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemwindowsformsdatagridclasscurrentcellchangedtopic.asp

    fonction isnumeric

    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vblr7/html/vafctisnumeric.asp
    [/code]

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Par défaut
    Merci pour ta réponse, ça m'a aidé
    Pour ceux que ca intéresserait, voici le code que j'ai utilisé afin de tester si ma valeur est bien numérique et ne pas prendre en compte les * de fin.
    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
        ' Lorsque l'on edite une cellule, ne pas afficher l'astérisque
        ' Se produit lorsque l'on commence à éditer une cellule (double clic ou F2)
        Private Sub dtgvDies_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dtgvDies.EditingControlShowing
            e.Control.Text = e.Control.Text.TrimEnd("*")
        End Sub
     
        ' Se produit lorsqu'on arrête l'édition, que l'on ait validé ou pas (ESC annule par ex.)
        Private Sub dtgvDies_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dtgvDies.CellEndEdit
     
            Dim cell As DataGridViewCell = dtgvDies.Rows(e.RowIndex).Cells(e.ColumnIndex)
            If cell.Tag Then   ' Tag est un bool qui me permet de savoir si je dois afficher l'astérisque
                cell.Value = cell.Value.TrimEnd("*") & "*"
            End If
        End Sub
     
        ' Se produit lorsque le texte d'une cellule est vérifié (changement de focus, fin d'edition, ...)
        Private Sub dtgvDies_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dtgvDies.CellValidating
            Dim strT As String = e.FormattedValue
            ' Si la cellule n'est pas en train d'etre éditée, ne pas prendre l'* de fin en compte
            If Not dtgvDies.CurrentCell.IsInEditMode Then
                strT = strT.TrimEnd("*")
            End If
            If Not IsNumeric(strT) Then
                MessageBox.Show("Dies number must be a positive numeric value", "Error")
                e.Cancel = True
            End If
        End Sub
    Explications : Validating ne se produit apparemment pas seulement après une édition validée (par ENTER ou changement de cellule), il se produit aussi à un changement de cellule. Dans mon cas, si on n'est pas en train d'éditer la cellule, je ne dois pas prendre en compte l'* de fin pour vérifier si le nombre est valide (en fait j'aurais aussi pu skipper le test de validité IsNumeric si on n'était pas en train d'éditer). Par contre, si je suis en train d'éditer ma cellule et que je valide, l'* ne doit pas être considérée comme un caractère valide.
    L'ordre des évenements (non exaustif) lors d'une édition est celui-ci :
    • CellBeginEdit
      EditingControlShowing
      Edition et puis validation
      CellValidating
      CellEndEdit

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

Discussions similaires

  1. Formatter les doubles dans DataGridView
    Par Echyzen dans le forum VB.NET
    Réponses: 9
    Dernier message: 02/05/2013, 11h22
  2. DataGridView avec un DataBinding et colonnes formattées
    Par StringBuilder dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/02/2012, 23h55
  3. Réponses: 2
    Dernier message: 21/12/2011, 13h58
  4. [VB.Net2005][Datagridview] Filtrage sur proc. stockée ?
    Par cedric_g dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/10/2007, 10h56
  5. Réponses: 4
    Dernier message: 23/10/2003, 08h03

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