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.NET] DataGridView et décimal


Sujet :

Windows Forms

  1. #1
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Par défaut [VB.NET] DataGridView et décimal
    Comment remplacer le point par une virgule quand un nombre décimal est saisie avec le pavé numérique dans une cellule d'un DataGridView ?

    Merci

  2. #2
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Un peu de recherche et de débrouillardise ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].Value = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString().Replace(".", ",");
            }

  3. #3
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    ce n'est pas plutot un probleme de globalisation ?

  4. #4
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Par défaut
    L'idée de shwin est bonne mais elle ne fonctionne pas puisque j'obtiens toujours l'erreur "Le format de la chaîne d'entrée est incorrect" que ce soit avec l'événement CellValidated ou CellValidating. Pour que ça marche il faudrait que l'événement se produise avant la validation hors je n'ai trouvé aucun événement Cell qui semble se produire avant la validation.

    Je pense effectivement que la solution serait du coté de la Globalization. Mon application est pourtant en culture Française mais rien n'y fait.

    J'ai également essayé avec l'événement KeyDown du datatgridview pour remplacer le point par une virgule au moment de la saisie mais sans succès.

  5. #5
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Par défaut
    J'ai un code qui me permettrait d'utiliser les API windows pour capturer la saisie du point pour le remplacer par une virgule mais je pense qu'il doit y avoir plus simple quand même.

    Personne ne peut me mettre sur la voie ?

  6. #6
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Par défaut
    Après de longues recherches j'ai trouvé 3 solutions.
    Je remercie au passage Tommy C. qui m'a envoyé un email à ce sujet.

    1 - Changer la culture du Thread

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Thread.CurrentThread.CurrentCulture=System.Globalization.CultureInfo.InvariantCulture
    Le défaut de cette méthode c'est que l'on perd le symbole € (euros)

    2- Modifier la base de registre pour changer la clef du séparateur décimal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Currentuse\Control Panel\International\sDecimal
    Le défaut de cette méthode c'est qu'il faut redémarrer le PC et cela influence toutes les applications !

    3- Capturer la touche "." du pavé numérique (solution que j'ai choisie)
    J'ai mis la propriété Keypreview de mon Winform principal sur True et je lui ai ajouté le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub formMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
            If e.KeyData = Keys.Decimal AndAlso System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator = "," Then
                e.SuppressKeyPress = True
                My.Computer.Keyboard.SendKeys(","c)
            End If
        End Sub
    Voilà, c'est simple et ça marche avec tous les datagridview de mon application.


  7. #7
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    avec ta methode si je fait SHIFT+. j'obtiens le point voici une methode qui marche mieux

    'si l'utilisateur clique sur le point on le remplace par une virgule, et oblige a ecrire du chiffre

    If e.KeyChar = "." Then
    e.KeyChar = ","
    ElseIf e.KeyChar > "9" Or e.KeyChar < "0" Then 'si l'utilisateur clique sur une touche non numerique je bloque la saisie
    e.Handled = True
    End If

  8. #8
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Par défaut
    Citation Envoyé par chris81
    avec ta methode si je fait SHIFT+. j'obtiens le point voici une methode qui marche mieux

    'si l'utilisateur clique sur le point on le remplace par une virgule, et oblige a ecrire du chiffre

    If e.KeyChar = "." Then
    e.KeyChar = ","
    ElseIf e.KeyChar > "9" Or e.KeyChar < "0" Then 'si l'utilisateur clique sur une touche non numerique je bloque la saisie
    e.Handled = True
    End If
    Le problème ce n'est pas trop l'interception du "." pour le transformer en virgule mais plutot de comment l'appliquer à une cellule du dataGridView.
    Tu mettrais ton code dans quel événement du DataGridView ?

  9. #9
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    ben en fait la je suis en train de chercher comment faire pour capturer la pression d'une touche lorsque que l'on est dans une cellule du datagridview mais c'est galere

  10. #10
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Par défaut
    Citation Envoyé par chris81
    ben en fait la je suis en train de chercher comment faire pour capturer la pression d'une touche lorsque que l'on est dans une cellule du datagridview mais c'est galere
    Je vois que tu as compris le problème
    Le soucis c'est qu'il n'y a pas non plus d'événement qui se produit avant la validation de la cellule. Si le DataGridView et lié à une datasource il y a une erreur généré par les nombres à virgules.
    Il aurait été simple de remplacer le "." par une "," avant la validation et le tour était joué mais aucun événement du DataGridView semble se produire avant la validation.
    J'ai essayé CellValidated, CellValidating et KeyDown sans succès. J'ai toujours l'erreur "Le format de la chaîne d'entrée est incorrect".
    J'ai donc résolu le problème en capturant la touche "." du pavé numérique au niveau de l'application.

  11. #11
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268

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

Discussions similaires

  1. [VB.NET][DataGridView]:couleur de fond d'une cellule
    Par BigTicket42 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/05/2008, 23h07
  2. [VB.NET] datagridview et sélection
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2006, 12h22
  3. [VB.NET] DataGridView à double entrée: comment faire?
    Par BillyboyK dans le forum Windows Forms
    Réponses: 7
    Dernier message: 06/04/2006, 10h06
  4. [vb.net] datagridview imbriqués, possible ou non?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/02/2006, 18h46
  5. [VB.NET] DataGridView et synchronisation avec une BD
    Par tidan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/02/2006, 12h12

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