Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2120 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1372957
Pilaon
Posté le 23-05-2006 à 11:20:51  profilanswer
 

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  :(

mood
Publicité
Posté le 23-05-2006 à 11:20:51  profilanswer
 

n°1373105
Profil sup​primé
Posté le 23-05-2006 à 13:15:09  answer
 

Bonjour

 

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

n°1373173
Pilaon
Posté le 23-05-2006 à 14:21:18  profilanswer
 


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

n°1373186
Profil sup​primé
Posté le 23-05-2006 à 14:27:34  answer
 

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.

 


n°1373235
Pilaon
Posté le 23-05-2006 à 14:58:30  profilanswer
 


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]

n°1373325
Profil sup​primé
Posté le 23-05-2006 à 16:26:09  answer
 

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

n°1375344
Pilaon
Posté le 26-05-2006 à 09:33:01  profilanswer
 

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

n°1375450
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 26-05-2006 à 12:25:33  profilanswer
 

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)
n°1375561
Pilaon
Posté le 26-05-2006 à 14:28:59  profilanswer
 

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é :/
 

n°1375586
Pilaon
Posté le 26-05-2006 à 15:00:10  profilanswer
 

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

mood
Publicité
Posté le 26-05-2006 à 15:00:10  profilanswer
 

n°1375600
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 26-05-2006 à 15:34:50  profilanswer
 

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)
n°1375661
Pilaon
Posté le 26-05-2006 à 17:04:04  profilanswer
 

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 ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[.NET] System.Drawing > Comment remplir une zone avec une image ?String => separateur => mise en forme
[ASP.NET] dropdownlist.selectedIndex renvoit toujours 0PictureBox[VB.NET]
Comment ajouter des lignes dans une table grace a un datagrid ?Développement Portail en .NET
[.NET] Mettre du 1.1 et du 2.0 sur le même siteVisual C++ .NET 2003 & BDD
[Résolu][.NET] ClickOnce (No Touch Deployment)[ASP.NET] Faire tourner de l'ASP.NET sans IIS
Plus de sujets relatifs à : [VB.NET] Séparateur décimal & DataGrid


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR