[C#] Datagrid point decimal supprimé automatiquement [Résolu]

Datagrid point decimal supprimé automatiquement [Résolu] [C#] - C#/.NET managed - Programmation

Marsh Posté le 15-06-2012 à 11:17:09    

Bonjour,
 
 
Je butte sur un problème un peu énervant. J'ai un écran avec une DataGridView liée à un OracleDataReader. Cette DataGrid peut-être alimentée par l'injection d'informations en provenance d'Excel ou par une saisie libre dans les colonnes.
 
Comme j'utilise la même DataGrid pour alimenter plusieurs tables, je ne connais donc pas le ni nombre, ni le type des colonnes de la grid.
 
Mon problème est que, pour les données décimales, lorsque l'on saisie par exemple 100.20 et que l'on sort du champ ou que l'on enregistre, le point séparateur disparait et cela devient 10020
Si l'on utilise une virgule dans ce cas pas de problème. Etant donnée qu'il s'agit de montant, c'est assez ennuyeux  :whistle:  
 
Comment puis-je forcer, pour toute la DataGrid que seul le . soit autorisé (ou au moins qu'il ne disparraisse pas) ?
 
Merci


Message édité par SplitForm le 15-06-2012 à 14:22:18
Reply

Marsh Posté le 15-06-2012 à 11:17:09   

Reply

Marsh Posté le 15-06-2012 à 14:22:03    

Bon et bien j'ai trouvé une solution. C'est un peu violent, mais ça force le DataError et donc je peux catcher l'erreur de saisie.
 
Lors du chargement de mes données, j'ai ajouté ce test :
 

if (Column.ValueType == typeof(decimal))
            Column.ValueType = typeof(string);


 
En gros, pour les colonnes définies en Decimal côté Oracle, je les repasse en type string. Du coup, lorsque l'on sort du champ, cela génère une erreur si la conversion en decimal échoue. Enfin, j'ai surchargé la méthode DataError de la DataGrid pour prévenir l'utilisateur qu'il y a un problème avec le point décimal.
 
Sinon, j'allais tenter ça, mais c'est plus long : http://www.theproblemsolver.nl/dotnet_faq_0015.htm
 
Tout est bien qui fini bien  [:zjk]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed