2009-01-07 29 views
5

Tôi có một ComboBox thiết lập như sau, nơi KVPList là một IList (của KeyValuePair nếu vấn đề):Ràng buộc một ComboBox để một IList và sử dụng SelectedValue

comboBox.DisplayMember = "Value"; 
comboBox.ValueMember = "Key"; 
comboBox.DataSource = KVPList; 

Sau đó tôi đã thiết lập một ràng buộc với SelectedValue , liên kết với một số BindingSource (đến một số DataSet). Vì bất kỳ lý do gì, hộp tổ hợp luôn bật lên khi biểu mẫu được hiển thị. Nó là dân cư đúng cách, tuy nhiên (các giá trị của IList hiển thị tốt và có thể được chọn).

Bây giờ, tôi đã cố gắng hết sức để theo dõi và dường như ban đầu thiết lập SelectedValue chính xác khi bị ràng buộc, nhưng sau đó một nơi nào đó dọc theo cách nó được đặt lại thành null. Tôi đã chơi với thứ tự được gọi là tốt, không có kết quả.

Có ai có thể làm sáng tỏ điều này hoặc đề xuất giải pháp thay thế không?

Đối với biểu ghi, trên cùng một biểu mẫu, tôi có một hình thức khác ComboBox trên cùng một biểu mẫu, với SelectedValue của nó được liên kết với cùng một BindingSource. DataSourceDataSet, không phải là IList và nó hoạt động như một sự quyến rũ. Nó có thể là một lựa chọn để thực hiện một DataTable từ IList, nhưng nó có vẻ như một toàn bộ rất nhiều thêm chi phí; Tôi đang tạo ra IList từ một điều tra.

Trả lời

7

Ouch. Sau khoảng nửa ngày lãng phí, tôi đã tìm ra. Đó hoàn toàn là lỗi của tôi.

Các KVPList được thiết lập để một IList của KeyValuePair<short,string>, nhưng lĩnh vực dữ liệu là loại int. Về cơ bản, databinding sẽ kích hoạt và thiết lập thuộc tính SelectedValue. Sau đó, các liên kết DisplayMemberValueMember sẽ kích hoạt, kiểm tra lại SelectedValue. Vì số ValueMember thuộc loại short, không phải là int, nó sẽ không tìm thấy kết quả phù hợp và do đó đặt thành giá trị rỗng.

Điều gì đó buồn cười phải xảy ra với quyền anh và unboxing, nhưng tôi quá mệt mỏi để hiểu tại sao ngay bây giờ.

Tôi sẽ để lại câu hỏi này trong trường hợp người khác gặp phải vấn đề tương tự. Thật khó để theo dõi bởi vì tôi mong đợi nó hoặc là cố gắng để đúc hoặc ném một ngoại lệ, không âm thầm đi null. Xét cho cùng, shortint là cả hai loại giá trị và cuối cùng tôi đã kiểm tra (int)10 == (short)10 là đúng.

+0

Cảm ơn câu trả lời của bạn. Tôi chạy vào cùng một vấn đề. Loại tài sản phụ thuộc của tôi là IList được liên kết với ILIst . (Foo thực hiện IFoo). Mọi thứ dường như đang làm việc ngoại trừ giá trị thuộc tính phụ thuộc luôn là null. Không có ngoại lệ hoặc đầu ra gỡ lỗi. Khi tôi thay đổi loại thuộc tính phụ thuộc thành IList mọi thứ bắt đầu hoạt động. –

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