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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.


+ 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, 22h07
  2. [VB.NET] datagridview et sélection
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2006, 11h22
  3. [VB.NET] DataGridView à double entrée: comment faire?
    Par BillyboyK dans le forum Windows Forms
    Réponses: 7
    Dernier message: 06/04/2006, 09h06
  4. [vb.net] datagridview imbriqués, possible ou non?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/02/2006, 17h46
  5. [VB.NET] DataGridView et synchronisation avec une BD
    Par tidan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/02/2006, 11h12

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