2012-07-02 33 views
6

Tôi có DataGridView. Trong một số ô, tôi thêm một số dữ liệu. Nếu ô mà tôi đang chỉnh sửa hiện đang trống và tôi sắp rời khỏi nó, một thông báo "bla-bla-bla" được hiển thị cho người dùng và ô trong chế độ ấn bản phải lấy lại tiêu điểm.Làm cách nào để hủy sự kiện CellEnter/CellLeave trong C#?

Để thực hiện việc này, tôi đang sử dụng CellEnter, CellLeave, CellEndEdit v.v ... và tôi muốn hủy các sự kiện đó sau khi kiểm tra giá trị được nhập trong ô. Nhưng Im noob và nó không hoạt động. Làm ơn giúp tôi. Sẽ rất vui khi thấy lời khuyên nào.

Dưới đây là biến thể của mã của tôi. Tôi đã thử với các sự kiện khác, nhưng nó là rất naive.

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

Hiển thị cho chúng tôi mã của bạn để được trợ giúp dựa trên nó. – HichemSeeSharp

+0

@cppanda> điều này có cần được giải mã bằng mã không? Có – stepler

+0

Vì vậy, điều bạn muốn là không cho phép người dùng từ bỏ chế độ ấn bản là giá trị được nhập không phải là "giá trị có thể chấp nhận" cho bạn? –

Trả lời

6

Tôi nghĩ bạn phải tìm giải pháp dựa trên sự kiện CellValidating của DataGridView.

Nó được kích hoạt ngay khi DataGridView sắp rời khỏi chế độ ấn bản và cho phép bạn không chấp nhận giá trị đã được người dùng nhập. Để từ chối giá trị được nhập, trong mã của trình xử lý sự kiện, bạn phải đặt e.Cancel thành True.

private void dataGridView1_CellValidating(object sender, 
    DataGridViewCellValidatingEventArgs e) 
{ 

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

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

Có rất nhiều ví dụ trong các trang web, người ta có thể tìm thấy trực tiếp trong tài liệu của DataGridViewCellValidatingEventArgs trong MSDN. Hãy xem cũng để tài liệu của các tài sản DataGridViewCellValidatingEventArgs.FormattedValue

Lưu ý rằng phương pháp IsValueValid(Object o) không phải là một phần của các thành phần DataGridView, chỉ là một ví dụ đặt tên, bạn nên khai báo nó trong mã của bạn và cung cấp một cơ quan về việc phê chuẩn .

+1

Vừa mới thử. Làm việc như tôi muốn. CẢM ƠN BẠN! – stepler

0

Bạn có thể không vô hiệu hóa các sự kiện lưới dữ liệu sủ CellEnter CellLeave cho tế bào nhất định hoặc các hàng.

Những gì bạn có thể làm là lưu trữ danh sách <> của ô trống/không nên gọi sự kiện vào/ra và trước khi thực hiện công cụ trong CellEnter/CellLeave kiểm tra xem ô có nằm trong danh sách các ô bị tắt hay không .

+1

Tôi sẽ nghĩ về nó. Cảm ơn bạn. – stepler

Các vấn đề liên quan