Bonjour à tous,
je travaille actuellement en WPF avec un DataGrid bindé avec une ObservableCollection dont toutes les colonnes sont en string.
Dans ce DataGrid, j'ai notamment 2 colonnes qui sont "liées" (pas dans le sens bind..) : une colonne "valeur en byte" et une colonne "valeur physique".
La colonne "physique" est éditable, mais pas la colonne "byte".
Les valeurs physique peuvent avoir des décimales, donc est castée en Double pour les calculs.
On change les valeurs en byte grâce à un simple produit en croix : "ValeurByte = ValeurPhysique*255/MaxPhysique;" où ValeurPhysique est casté en Double car sa forme String est sous forme de Double et MaxPhysique, qui est initialement déclaré en Double, est casté en int car la valeur en byte ne peut avoir de décimal et l'opérateur "/" renvoie un int si l'un des opérandes est un int.
Le problème est que si l'utilisateur est anglais, il utilisera le '.' comme séparateur.
J'ai donc tenté de modifier ce '.' en virgule lorsqu'il y a un évènement "CellEditEnding" avec un Replace('.' , ',').
Mais.. Ça ne marche pas du tout! En mode debug, je vois qu'on passe bien par la ligne, mais elle n'est pas appliquée : le '.' ne devient pas ',' . Je n'ai aucune erreur sauf à la ligne où j'essaie de faire un calcul, ce qui est logique car le '.' est gardé lors du changement en double...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private void grid_dataSet_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { DataGridRow row1 = e.Row; int row_index = ((System.Windows.Controls.DataGrid)sender).ItemContainerGenerator.IndexFromContainer(row1); dataSetParameters[row_index].physicalValue.Replace('.', ','); if (0 <= row_index && row_index <= 43) { dataSetParameters[row_index].byteValue = (Convert.ToDouble(dataSetParameters[row_index].physicalValue) * 255 / MaxValue).ToString("###"); } }
J'espère m'être bien exprimée et que c'est compréhensible pour vous,
Merci d'avance à ceux qui se penchent sur mon problème!
Partager