Da . (Punto) a , (Virgola) in una cella del DataGridView

di jekisi il
19 risposte

Salve a tutto il forum, mi servirebbe la seguente informazione:

In una cella di un DataGridView inserisco un importo e lo formatto col simbolo dell' euro e 2 cifre decimali.

per salvare uso l' istruzione

ImportoassegnoTextBox.Select()

e subito dopo la query di Update facendo riferimento alle textbox.

Adesso, si potrebbe fare che scrivo un importo con punto (Esempio - 52.23) e tramite codice me lo converte con la virgola 

(Esempio - 52,23)?

Fatemi sapere.

Grazie

19 Risposte

  • Nell'evento di uscita dal textbox usa il metodo Replace 

  • Oppure, nell'evento keypress, da associare a tutte le textbox che hanno importi:

    If e.KeyChar = "." Then e.KeyChar = ","

  • Il Replace alla fine varrebbe anche per i dati copia-incollati

  • Infatti ho scritto “oppure” ma era un ulteriore suggerimento per evitare che su un campo dove deve inserire importi non si possa scrivere “abc”. Anche replace si arrende al copia incolla se incolli “ciao”.

  • Andrea, la mia era una precisazione per l'OP non una critica al tuo post.

    Se proprio vogliamo essere precisi, si parla di cambio del punto in virgola e il replace lo fa in tutti i casi, non di validazione dell'input, che non è argomento del thread e non c'entra nulla nella discussione. 

  • 27/11/2023 - oregon ha scritto:


    Andrea, la mia era una precisazione per l'OP non una critica al tuo post.

    Se proprio vogliamo essere precisi, si parla di cambio del punto in virgola e il replace lo fa in tutti i casi, non di validazione dell'input, che non è argomento del thread e non c'entra nulla nella discussione. 

    Non l'ho presa come una critica.

    Sollevando il dubbio su copia-incolla 1.237,40 diventerebbe 1,237,40 e 1,237.40 diventerebbe 1,237,40

    Io opterei per una maschera.

    Ed è un consiglio per jekisi.

  • In effetti anche con 

    If e.KeyChar = "." Then e.KeyChar = “,”

    Potresti ritrovarti con 1,237,40

    Io cambierei approccio.

  • Ma dato che io faccio, ad esempio, ImportoassegnoTextBox.Select

    e poi eseguo la Query di Update

    Invece di cambiare da . a , nella cella della datagrid, si può fare nella textbox?

  • Una maschera di input a valuta.

  •  Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            If e.KeyChar = "." Then e.KeyChar = ","
        End If
    End Sub

    Così non va, premendo INVIO non succede nulla scrivendo nella text ad esempio 0.55

  • 09/12/2023 - jekisi ha scritto:


     Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            If e.KeyChar = "." Then e.KeyChar = ","
        End If
    End Sub

    Così non va, premendo INVIO non succede nulla scrivendo nella text ad esempio 0.55

    Ma tu riesci a leggere quello che scrivi (o copi da qualche parte)?

    Traduco:

    Se premi invio allora se il tasto premuto è un punto allora il tasto diventa virgola.

    Il codice viene eseguito appena premi invio (in quel componente).

    Scrivi solo 

    If e.KeyChar = "." Then e.KeyChar = “,”

        End If

    In ogni caso sarebbe meglio una maschera.

    Il controllo dei caratteri digitati può essere utile per inibire l'uso di tasti che non siano numerici ad eccezione di invio, punto e virgola.

  • Ok, sulla Textbox funziona, e adesso per fare la stessa cosa su una cella di una rispettiva colonna di un datagridview, come dovrei fare?

  • Prendi spunto da questo pezzo di codice.Anche se c# dovresti poterlo rendere in vb.net senza problemi e adattare al tuo scopo…

     private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
       DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
       tb.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress);    
       e.Control.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress);
    }
        
    private void dataGridViewTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
       if (e.KeyChar==(char)Keys.Enter)
       {
          MessageBox.Show("You press Enter");
       }
    }
Devi accedere o registrarti per scrivere nel forum
19 risposte