Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215

    [VB.NET 2005] controllare che il valore inserito in una cella di un datagrid

    Attraverso un dataset popolo una datagridview con dei dati.

    Le colonne sono:
    Codice
    Descrizione
    Prezzo

    ora ho l'esigenza di modificare i valori dei dati esistenti ma devo effettuare il controllo sulla colonna prezzo che non vengano inserite lettere.
    Ho provato ad utilizzare gli eventi della datagridview CellValueChanged e CurrentCellChanged
    ma con scarso risultato.
    Magari a qualcuno è già capitato questo problema.

    Ringrazio anticipatamente ogni consiglio!!
    Malkav
    La mia pazzia continua a prosciugare la mia anima

  2. #2
    CellValidating?

  3. #3
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    Grande!!!! ti ringrazio
    La mia pazzia continua a prosciugare la mia anima

  4. #4
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    Originariamente inviato da Jeremy75
    CellValidating?
    A questo punto oltre a controllare che il valore inserito nella cella sia numerico e possibile fare in modo che se non venga proprio inserito del testo??
    Per la serie accanisciti quanto vuoi ma tanto non scrive...
    La mia pazzia continua a prosciugare la mia anima

  5. #5
    Scusa ma non ho capito

  6. #6
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    in pratica vorrei fare in modo che i valori non numerici non venissero proprio scritti all'interno della cella
    La mia pazzia continua a prosciugare la mia anima

  7. #7
    Ho tentato anch'io di fare la tua stessa cosa qualche giorno fa. Con l'evento KeyPress puoi controllare i tasti che vengono premuti prima che vengano stampati a video e quindi decidere anche se annullare la loro pressione (come se non fosse stato inserito nulla), solo che nel caso di una griglia l'evento si riferisce all'intera griglia e non ad una singola cella... :master: e mi chiedo a cosa serva questo evento per l'intera griglia... ed io mi sono bloccato qui

  8. #8
    Si potrebbe risolvere .... sfruttando l'API GetAsyncKeyState .... ora non ho tempo ma se avete pazienza per domani sera vi posto un esempio.
    Ciao

  9. #9
    Senza ricorrere all'uso dell'API GetAsyncKeyState .... si potrebbe intercettare l'evento KeyPress del Form contenitore del DataGridView e risolvere il problema in questo modo.
    codice:
    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
            If DataGridView.CurrentCell Is Nothing Then Return
                If DataGridView1.CurrentCell.ColumnIndex = 0 Then
                    If Char.IsNumber(e.KeyChar) Then
                        e.Handled = True
                    End If
                End If
        End Sub
    La condizione If DataGridView1.CurrentCell.ColumnIndex serve per limitare il controllo ad una cella specifica.....io ho messo il valore 0 per limitare il controllo alla prima cella di ogni riga.
    Ovviamente, questo è solo uno spunto .... adattatelo alle vostre esigenze.

    P.S.: Ricordate di impostare KeyPreview del Form a True.

    Ciao

  10. #10
    Grande!
    Io avevo provato ad intercettare l'evento KeyPress del Form, ma avevo completamente dimenticato il KeyPreview e continuavo a provare invano.
    Comunque è meglio aggiungere questa istruzione:
    codice:
            If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Back) Or e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Cancel) Then Exit Sub
    altrimenti una volta inserite le cifre se hai sbagliato non puoi più cancellarle.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.