2012-07-02 8 views
6

Mam DataGridView. W niektórych komórkach dodaję dane. Jeśli komórka, którą aktualnie edytuję, jest pusta i mam zamiar ją opuścić, zostanie wyświetlony komunikat "bla-bla-bla", a komórka w trybie edycji musi otrzymać fokus z powrotem.Jak anulować zdarzenie CellEnter/CellLeave w języku C#?

W tym celu używam CellEnter, CellLeave, CellEndEdit itd. I chcę anulować te zdarzenia po sprawdzeniu wartości wprowadzonej w komórce. Ale Im noob i to nie działa. Proszę pomóż mi. Byłoby miło zobaczyć jakąkolwiek radę.

Oto wariant mojego kodu. Próbowałem z innymi wydarzeniami, ale jest bardzo naiwny naiwny.

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dataGridView1[e.ColumnIndex, e.RowIndex] == null) 
    { 
     MessageBox.Show("Empty cell!"); 

     dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex]; 
    } 
} 
+0

Pokaż nam swój kod, aby pomoc była oparta na nim. – HichemSeeSharp

+0

@ cppanda> czy to musi być rozwiązane przez kod? Tak – stepler

+0

Więc nie chcesz, aby użytkownik porzucił tryb edycji, czy wprowadzona wartość nie jest dla ciebie "wartością dopuszczalną"? –

Odpowiedz

6

Myślę, że należy szukać rozwiązania na podstawie zdarzenia CellValidating z DataGridView.

Jest uruchamiany właśnie wtedy, gdy DataGridView wkrótce wyjdzie z trybu edycji i nie zaakceptuje wartości wprowadzonej przez użytkownika. Aby odrzucić wprowadzoną wartość, w kodzie obsługi zdarzenia należy ustawić wartość e.Cancel na True.

private void dataGridView1_CellValidating(object sender, 
    DataGridViewCellValidatingEventArgs e) 
{ 

    if (!IsValueValid(e.FormattedValue)) 
    { 
     e.Cancel = true; 

     MessageBox.Show("Not Valid!"); 
    } 
} 

Istnieje wiele przykładów w internecie, można znaleźć bezpośrednio w dokumentacji DataGridViewCellValidatingEventArgs w MSDN. Spójrz również do dokumentacji nieruchomości DataGridViewCellValidatingEventArgs.FormattedValue

Zauważmy, że metoda IsValueValid(Object o) nie stanowi części składowej DataGridView, jest po prostu nazywanie przykład, należy zadeklarować ją w kodzie i stworzenie zespołu do walidacji .

+1

Właśnie teraz próbowałem. Działa tak, jak chciałem. DZIĘKUJĘ CI! – stepler

0

Można nie wyłączyć Imprezy datagrids CellEnter CellLeave dla niektórych komórek lub wierszy.

Co można zrobić, to przechowywać listę <> Komórek, które są puste/gdzie nie należy wywoływać zdarzenia enter/leave, a przed wykonaniem czynności w komórce CellEnter/CellLeave sprawdzić, czy komórka znajduje się na liście wyłączonych komórek .

+1

Pomyślę o tym. Dziękuję Ci. – stepler