2011-09-11 49 views
8

Đối với một số lý do khi thêm hoặc xoá các mục từ DataSource (một BindingList đơn giản) ComboBox cập nhật cho phù hợp nhưng nếu tôi chỉnh sửa một mục như thế này, nó không cập nhật tự động:ComboBox không tự động cập nhật khi DataSource thay đổi?

myBindingList[index].Name = "NewName"; 
myBindingList[index].Value = newValue; 

Để có được nó để cập nhật khi tôi chỉnh sửa một mục như trái ngược với việc tạo ra hoặc loại bỏ một mục tôi phải làm điều này sau khi thay đổi được thực hiện:

myComboBox.DataSource = null; 
myComboBox.DataSource = myBindingList; 

này sửa chữa các vấn đề nhưng nó có vẻ như một giải pháp khá lộn xộn. Ngoài ra với danh sách lớn nó có thể trở nên chậm (tối ưu hóa sớm tôi biết) nhưng vẫn còn có một cách để buộc các ComboBox để cập nhật mà không hoàn toàn tái gán DataSource của nó?

Cảm ơn bạn đã đọc.

Trả lời

6

này được nêu trong các diễn đàn MSDN:

Giao diện IBindingList chứa các sự kiện ListChanged nơi điều khiển giống như các combobox treo lên nếu nguồn dữ liệu cơ bản gán cho nó thực hiện các giao diện nói. nguồn dữ liệu của bạn phải nâng cao ListChanged tương ứng với ListChangeEventArgs phù hợp nếu bao giờ bạn thêm, xóa, thay đổi, v.v. trình triển khai IBindingList của bạn. theo cách này, bất cứ khi nào nguồn cơ bản bạn sử dụng để liên kết với hộp tổ hợp của bạn được thay đổi, điều khiển giao diện người dùng tương ứng (combobox) là làm mới.

bạn nói bạn đang sử dụng BindingList và trên thực tế, bạn có được hộp tổ hợp để phản ánh thêm hoặc xóa các sự kiện mặt hàng. Tôi nghĩ bạn nên cập nhật các mục đã có trong BindingList của bạn theo cách khác vì trông giống như các sự kiện BindingList thích hợp không được kích hoạt.

bạn có thể điều tra về điều đó hoặc chỉ đơn giản là sống với đặt lại và gán lại nguồn dữ liệu, tôi không nghĩ là quá tệ, bạn đang ở trong ứng dụng biểu mẫu của Windows không có trong biểu mẫu web SatetLess để bạn luôn có đối tượng của mình :)

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