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
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
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(".", ","); }
ce n'est pas plutot un probleme de globalisation ?
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.
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 ?![]()
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
Le défaut de cette méthode c'est que l'on perd le symbole € (euros)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Thread.CurrentThread.CurrentCulture=System.Globalization.CultureInfo.InvariantCulture
2- Modifier la base de registre pour changer la clef du séparateur décimal
Le défaut de cette méthode c'est qu'il faut redémarrer le PC et cela influence toutes les applications !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Currentuse\Control Panel\International\sDecimal
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 :
Voilà, c'est simple et ça marche avec tous les datagridview de mon application.
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
![]()
Partager