2013-03-20 10 views
7

È possibile limitare l'input dell'utente alla cella DataGridView tramite RegEx? Ad esempio, imposta il formato dell'input della cella su qualcosa di simile a [0-9]{2} per impedire all'utente di inserire qualcosa tranne due cifre.DataGridView limita l'input utente

UPDATE Siamo spiacenti, non ero molto chiaro. Sono a conoscenza dell'evento CellValidation e posso verificare il valore inserito dopo l'input dell'utente. Ma mi chiedo se posso impedire l'input dell'utente sbagliato prima di questo evento. Voglio dire che l'utente non può inserire lettere quando l'espressione regolare delle celle è [0-9]. È possibile?

+1

Si chiama "Maschera" quando si limita il valore di input in questo modo: vedere [questo] (http://stackoverflow.com/questions/6411511/datagridview-mask-values-in-column) –

+0

Penso che in tal caso dovresti usare qualche javascript/jQuery –

+0

@pawlakppp che funziona male in WinForms :) –

risposta

8

Se si desidera impedire valori non validi durante la digitazione, è possibile gestire l'evento EditingControl.KeyPress. Esempio di codice qui sotto. Devi modificare le tue espressioni regolari per consentire valori incompleti, però. E dovresti comunque usare la validazione corretta, perché ci sono altri modi per ottenere i dati nella griglia (come ad esempio il copia incolla).

private string pattern = "^[0-9]{0,2}$"; 

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     dataGridView1.EditingControl.KeyPress -= EditingControl_KeyPress; 
     dataGridView1.EditingControl.KeyPress += EditingControl_KeyPress; 
    } 

    private void EditingControl_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar)) 
     { 
      Control editingControl = (Control)sender; 
      if (!Regex.IsMatch(editingControl.Text + e.KeyChar, pattern)) 
       e.Handled = true; 
     } 
    } 
+0

Funziona bene. Brillante! – fat

1

@Ginosaji, il codice è buono, ma con editingControl.Text + e.KeyChar si sta assumendo che utente inserisce l'ultimo carattere alla fine del testo di controllo. Cosa succede se l'utente posiziona il char nel mezzo del controllo da qualche parte?