2013-03-20 24 views
7

Czy można ograniczyć wprowadzanie użytkownika do komórki DataGridView za pomocą RegEx? Na przykład ustaw format wprowadzania komórki na coś podobnego do tego [0-9]{2}, aby zabronić użytkownikowi wprowadzić coś poza 2 cyframi.DataGridView ograniczyć wprowadzanie użytkownika

UPDATE Przykro mi, ale nie było to zbyt jasne. Jestem świadomy zdarzenia CellValidation i mogę sprawdzić wprowadzoną wartość po wprowadzeniu danych przez użytkownika. Zastanawiam się jednak, czy mogę zapobiec temu błędnemu wprowadzeniu przez użytkownika przed tym wydarzeniem. Chodzi mi o to, że użytkownik nie może wprowadzać liter, gdy regex komórki to [0-9]. Czy to możliwe?

+1

Jest nazywany "maską", gdy ograniczasz wartość wejściową w następujący sposób: Zobacz [to] (http://stackoverflow.com/questions/6411511/datagridview-mask-values-in-column) –

+0

Myślę, że w tym przypadku powinieneś używać javascript/jQuery –

+0

@pawlakppp, który działa słabo w WinForms :) –

Odpowiedz

8

Jeśli chcesz zapobiec wprowadzaniu nieprawidłowych wartości podczas ich wpisywania, możesz obsłużyć zdarzenie EditingControl.KeyPress. Przykładowy kod poniżej. Musisz jednak zmodyfikować wyrażenia regularne, aby zezwolić na niepełne wartości. Nadal powinieneś używać poprawnego sprawdzania poprawności, ponieważ istnieją inne sposoby pobierania danych do siatki (na przykład kopiowanie wklejane).

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

Działa dobrze. Znakomity! – fat

1

@Ginosaji, Twój kod jest dobra, ale z editingControl.Text + e.KeyChar jesteś przy założeniu, że użytkownik wpisze ostatni char na końcu tekstu sterowania. Co zrobić, jeśli użytkownik umieszcza znak w środku kontroli?

Powiązane problemy