2010-08-27 41 views
7

Đây là câu hỏi WinForms C#.Làm thế nào để theo dõi bất cứ khi nào một giá trị ô được thay đổi trong DataGridView?

Tôi có một điều khiển DataGridView tùy chỉnh được kế thừa từ lớp DataGridView chuẩn. Tôi muốn theo dõi trường hợp bất cứ khi nào một ô được thêm vào lưới, giá trị ô được thay đổi trong lưới. Tôi không có ý tưởng làm thế nào để làm điều này.

Sự kiện DataBindingCompleted là bất lực ở cấp ô/hàng/cột. Sự kiện CellValueChanged tự nhầm lẫn vì nó chỉ được kích hoạt khi người dùng sửa đổi một giá trị từ giao diện người dùng và là bất lực nếu giá trị được cập nhật từ nguồn dữ liệu cơ bản. Sự kiện thích hợp để lắng nghe là gì?

Tôi biết lớp DataGridViewCell có sự kiện ValueChanging. Nhưng trong DataGridView tùy chỉnh, làm cách nào tôi có thể móc trình xử lý sự kiện của mình vào mọi ô?

Cảm ơn sự giúp đỡ.

Trả lời

-1

Trong điều khiển tùy chỉnh của bạn, bạn cần một biến sự kiện toàn cầu:

public event EventHandler CustomCellValueChanged; 

bạn cần phải thiết lập các tế bào sự kiện thay đổi với điều này:

private void gvGridView_CellValueChanged(object sender, EventArgs e) 
    { 
     EventHandler Handler = CustomCellValueChanged; 
     if (Handler != null) { Handler(this, e); }; 
    } 

Sau đó, trong biểu mẫu, bạn sẽ có thể để kiểm tra sự kiện CustomCellValueChanged

+1

Điều này không giải quyết được vấn đề ban đầu. Nó tạo ra một bản sao dự phòng CellValueChanged không phục vụ mục đích nào vì lớp con sẽ vẫn cung cấp quyền truy cập vào sự kiện ban đầu. Nó không kích hoạt khi các ô được thêm vào lưới, như tác giả của câu hỏi được chỉ định. –

+0

Đồng ý với Bradley. Nhưng vẫn cảm ơn bạn đã nỗ lực. – Steve

+0

Ah xin lỗi, đọc sai câu hỏi. Lỗi của tôi. – Wildhorn

1

1 、 Bạn có thể kế thừa DataGridView khi tùy chỉnh DataGridView.If kế thừa UserControl để tùy chỉnh DataGridView, bạn không thể trực tiếp nhận CellValueC sự kiện treo cổ khi tạo DataGridView tùy chỉnh trong dự án hoặc ứng dụng khác.

2 、 Để làm điều gì đó trong CellValueChanged.

3 、 Inherit DataGridView triển khai.

(1) Tạo UserControl.Name là DataGridViewEx.

(2) Sửa đổi kế thừa. public partial class DataGridViewEx : UserControl ==>public partial class DataGridViewEx :DataGridView

(3) Mở DataGridViewEx.Designer.cs và bảo vệ //this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; .Công câu là trong phương thức InitializeComponent().

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