[VB.NET] Séparateur décimal & DataGrid

Séparateur décimal & DataGrid [VB.NET] - VB/VBA/VBS - Programmation

Marsh Posté le 23-05-2006 à 11:20:51    

Bonjour,
j'utilise un datagrid qui est alimenté par un DataSet. Dans ce datagrid, j'ai une colonne "Montant" qui est de type numérique et dans laquelle j'aimerai pouvoir faire des modifications. Le problème vient du séparateur décimal: lorsque je saisis un montant avec une virgule, j'aimerai pouvoir utiliser la touche "." du pavé numérique. Hors si je l'utilise, le datagrid ne prend pas en compte les modifications et remet systématiquement la valeur précédente (avant les modifications). Je pense que ca vient du fait que le champ montant de la table que j'utilise (sous oracle 8i) n'accepte que les "," d'ailleurs si je saisis une virgule tout fonctionne correctement.
J'ai essayé pas mal de chose mais rien n'a résolu mon problème (chgt du séparateur décimal, événement datagrid...)
Le format de ma colonne est du type "###### ##0.00".
Est-ce que quelqu'un serai capable de me dire comment utiliser le point du pavé numérique, et qu'il soit reconnu comme une virgule dans la cellule courante de mon datagrid ?? Ou bien une autre méthode mais en agissant seulement sur le datagrid
Merci beaucoup d'avance  :(

Reply

Marsh Posté le 23-05-2006 à 11:20:51   

Reply

Marsh Posté le 23-05-2006 à 13:15:09    

Bonjour

 

Dans tes paramètres Windows (options regionales), le separateur est bien un "."  ?

Reply

Marsh Posté le 23-05-2006 à 14:21:18    


 
Salut acecel,
non c'est la virgule pour les nombres et les symboles monétaires.

Reply

Marsh Posté le 23-05-2006 à 14:27:34    

Pilaon a écrit :

Salut acecel,
non c'est la virgule pour les nombres et les symboles monétaires.


Ton problème vient de là, ton appli utilise les paramètres du système.
Change ce symbole dans windows, et tu pourras utiliser le "."

 


Ou alors il faut gerer les deux dans l'application, sur le Form_KeyPress (ou KeyDown), remplacer le code renvoyé par celui que tu souhaites.

 


Reply

Marsh Posté le 23-05-2006 à 14:58:30    


Oui mais le problème c'est que le datagrid ne veut pas du point justement, mais uniquement de la virgule. J'ai fixéle séparateur par défaut en le passant à "," dans l'application (et seulement dans l'application) mais ca ne change rien :/
Pour ce qui est d'intercepter la touche, j'ai déjà essayé mais c'est en lecture seule  :cry:  
J'ai déjà fait ça sur des textboxes  
 

Code :
  1. Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
  2.         Try
  3.             'Si le caractère saisie est un "."
  4.             If e.KeyChar = "." Then
  5.                 'On annule la frappe
  6.                 e.Handled = True
  7.                 'on ajoute le caractère "," à la place dans le textBox
  8.                 TextBox3.Text += ","
  9.                 'On place le curseur à la fin du textBox pour continuer la saisie
  10.                 TextBox3.SelectionStart = TextBox3.Text.Length
  11.             End If
  12.         Catch ex As Exception
  13.             MsgBox(ex.Message)
  14.         End Try
  15.     End Sub


Mais pour le datagrid, je ne trouve pas les bons évènements  [:atog]

Reply

Marsh Posté le 23-05-2006 à 16:26:09    

Fait le sur ta form, en verifiant que le contrôle actif est bien ton datagrid

Reply

Marsh Posté le 26-05-2006 à 09:33:01    

Est-ce que quelqu'un aurait un exemple, parceque j'ai essayé toutes les possibilités d'événements -> sans succès :(
help please

Reply

Marsh Posté le 26-05-2006 à 12:25:33    

l'affichage d'un flottant en chaine de caractères dépend de la culture du thread courant et pas d'évenements, du SGBD ou de quoi que ce soit d'autre. l'affichage du point peut se faire en utilisant InvariantCulture, qui représente une culture anglaise, mais associée à aucun pays.

Code :
  1. Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture

Message cité 1 fois
Message édité par Harkonnen le 26-05-2006 à 12:28:02

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-05-2006 à 14:28:59    

Harkonnen a écrit :

l'affichage d'un flottant en chaine de caractères dépend de la culture du thread courant et pas d'évenements, du SGBD ou de quoi que ce soit d'autre. l'affichage du point peut se faire en utilisant InvariantCulture, qui représente une culture anglaise, mais associée à aucun pays.

Code :
  1. Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture



Merci beaucoup, ca fonctionne très bien.
J'avais manipulé du code semblable mais ca n'avait pas marché :/
 

Reply

Marsh Posté le 26-05-2006 à 15:00:10    

Re ;),
Y-a-t'il un moyen d'utiliser un évènements KeyPress dans une cellule d'un Datagrid et non sur le datagrid lui même ?  
merci

Reply

Marsh Posté le 26-05-2006 à 15:00:10   

Reply

Marsh Posté le 26-05-2006 à 15:34:50    

une cellule de datagrid n'est rien d'autre qu'un Textbox. tu dois donc créer ton propre DataGridColumnStyle et lui assigner ton GridColumnStyle pour ajouter un event à la cellule que tu souhaites !

Code :
  1. Me.DataGrid1.TableStyles.Clear()
  2. Dim dgts As New DataGridTableStyle
  3. dgts.MappingName = "grid"
  4. Me.DataGrid1.TableStyles.Add(dgts)
  5. Dim cellTextBoxColumn As DataGridTextBoxColumn = DataGrid1.TableStyles("grid" ).GridColumnStyles("champ" )
  6. Dim dgtb As DataGridTextBox = CType(cellTextBoxColumn.TextBox, DataGridTextBox)
  7. AddHandler dgtb.KeyPress, AddressOf cell_KeyPressed // cell_KeyPressed est la fonction qui réagira a l'appui d'une touche dans ta cellule


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-05-2006 à 17:04:04    

Harkonnen a écrit :

une cellule de datagrid n'est rien d'autre qu'un Textbox. tu dois donc créer ton propre DataGridColumnStyle et lui assigner ton GridColumnStyle pour ajouter un event à la cellule que tu souhaites !

Code :
  1. Me.DataGrid1.TableStyles.Clear()
  2. Dim dgts As New DataGridTableStyle
  3. dgts.MappingName = "grid"
  4. Me.DataGrid1.TableStyles.Add(dgts)
  5. Dim cellTextBoxColumn As DataGridTextBoxColumn = DataGrid1.TableStyles("grid" ).GridColumnStyles("champ" )
  6. Dim dgtb As DataGridTextBox = CType(cellTextBoxColumn.TextBox, DataGridTextBox)
  7. AddHandler dgtb.KeyPress, AddressOf cell_KeyPressed // cell_KeyPressed est la fonction qui réagira a l'appui d'une touche dans ta cellule



Merci, je vais essayer ;)

Reply

Sujets relatifs:

Leave a Replay

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