2010-05-08 29 views
14

Tôi có câu hỏi đơn giản có thể ai đó đã hỏi nó trước tôi nhưng tôi không thể tìm thấy nó. Hãy nói rằng tôi có dữ liệu có một số dữ liệu từ cơ sở dữ liệu và tôi muốn liên kết nó với combobox tôi sử dụng mã standart như nàySự kiện Comobox Đã chọnValueChanged

comboBox1.BeginUpdate(); 
comboBox1.ValueMember = "id"; 
comboBox1.DisplayMember = "name"; 
comboBox1.DataSource = dt; 
comboBox1.EndUpdate(); 

vấn đề là trong thời gian này liên kết các sự kiện SelectedValueChanged là fired.The vấn đề là rebind kết hợp nhiều lần khi giá trị outher thay đổi và mỗi khi tôi phải làm sometihn như

comboBox1.SelectedIndexChanged -= new System.EventHandler(this.comboBox1_SelectedValueChanged); 

câu hỏi của tôi này có cách nào thông minh hơn để bỏ qua sự kiện khi tôi đến từ databinding không phải từ người dùng input.The vấn đề là tôi muốn làm điều đó một số globaly trong kiểm soát của tôi mà kế thừa combobox và không để làm điều đó mọi lúc trong mọi từ Trân trọng,
Iordand

+1

bạn có thể nghĩ theo một cách khác: u có thể biến biến toàn cục thành biến sai và trong sự kiện này kiểm tra nó và sau khi hoàn thành tất cả các liên kết, đặt thành đúng –

Trả lời

18

Hãy thử sử dụng SelectionChangeCommitted sự kiện.

Từ tài liệu MSDN:

SelectionChangeCommitted được nâng lên chỉ khi người dùng thay đổi các lựa chọn hộp combo. Không sử dụngSelectedIndexChanged hoặc SelectedValueChangedđể nắm bắt người dùng thay đổi, bởi vì những sự kiện là cũng nêu ra khi lựa chọn thay đổi theo chương trình.

+0

đã tiết kiệm thời gian cho tôi. –

0

I đã luôn luôn làm như cracker không gian nói. Tôi tạo ra một biến boolean toàn cầu có tên _isLoading và đặt nó thành true trong khi tải combobox của tôi, sau đó trở lại false khi nó được thực hiện. Sau đó, trong xử lý sự kiện dòng đầu tiên là

if(_isLoading) return; 
Các vấn đề liên quan