2012-04-04 27 views
7
List<Customer> _customers = getCustomers().ToList(); 
BindingSource bsCustomers = new BindingSource(); 
bsCustomers.DataSource = _customers; 
comboBox.DataSource = bsCustomers.DataSource; 
comboBox.DisplayMember = "name"; 
comboBox.ValueMember = "id"; 

Bây giờ, làm cách nào để đặt Mục của combobox thành một mục nào đó không phải là mục đầu tiên trong danh sách? Đã thử comboBox.SelectedItem = someCustomer; ... và rất nhiều thứ khác nhưng không may mắn cho đến nay ...Đặt SelectedItem trên hộp tổ hợp được liên kết với nguồn dữ liệu

Trả lời

9

Bạn nên làm

comboBox.SelectedValue = "valueToSelect"; 

hoặc

comboBox.SelectedIndex = n; 

hoặc

comboBox.Items[n].Selected = true; 
+0

comboBox.Items [n] .Selected = true; doesnt làm việc cho tôi (có thể là một vấn đề CF) nhưng SelectedValue nào, tôi đã thử nó trước nhưng với giá trị sai. Cảm ơn. – mdc

+0

Tôi muốn lưu ý rằng đối với tôi để có được điều này để làm việc tôi đã phải xác định các lĩnh vực đó là thành viên giá trị, không chỉ là đối tượng. Vì vậy, trong trường hợp khách hàng ở trên, tôi đã phải sử dụng 'comboBox.SelectedValue = customerToSelect.id'. – AdamMc331

2

đang ràng buộc của bạn Chưa hoàn thành. Hãy thử điều này:

BindingSource bsCustomers = new BindingSource(); 
bsCustomers.DataSource = _customers; 

comboBox.DataBindings.Add(
    new System.Windows.Forms.Binding("SelectedValue", bsCustomers, "id", true)); 
comboBox.DataSource = bsCustomers; 
comboBox.DisplayMember = "name"; 
comboBox.ValueMember = "id"; 

Trong hầu hết các trường hợp, bạn có thể hoàn thành nhiệm vụ này trong thiết kế, thay vì làm nó trong mã.

Bắt đầu bằng cách thêm nguồn dữ liệu vào cửa sổ "Nguồn dữ liệu" trong Visual Studio. Mở nó từ menu Chế độ xem> Cửa sổ khác> Nguồn dữ liệu. Thêm nguồn dữ liệu đối tượng của loại Customer. Trong Nguồn dữ liệu, bạn sẽ thấy thuộc tính của khách hàng. Thông qua một nhấp chuột phải vào các thuộc tính, bạn có thể thay đổi điều khiển mặc định liên quan đến nó.

Bây giờ bạn có thể chỉ cần kéo thuộc tính từ cửa sổ Nguồn dữ liệu vào biểu mẫu của bạn. Visual Studio tự động thêm A BindingSource và một thành phần BindingNavigator vào biểu mẫu của bạn khi bạn thả điều khiển đầu tiên. Các BindingNavigator là tùy chọn và bạn có thể loại bỏ nó một cách an toàn, nếu bạn không cần nó. Visual Studio cũng làm tất cả các dây-up. Bạn có thể tinh chỉnh nó thông qua cửa sổ thuộc tính. Đôi khi điều này là bắt buộc đối với hộp tổ hợp.

Chỉ có một điều phải làm trong mã của bạn: Gán một nguồn dữ liệu thực tế với nguồn ràng buộc:

customerBindingSource.DataSource = _customers; 
+0

Với điều đó nó crasches trên comboBox.ValueMember = "id"; đối với một số lý do? – mdc

+2

Tôi đề nghị bạn thêm 'BindingSource' làm thành phần vào biểu mẫu của bạn trong trình thiết kế (xem phần 'Dữ liệu' của' Hộp công cụ'). Sau đó, bạn có thể đặt tất cả các thuộc tính này thông qua cửa sổ thuộc tính. Nó thậm chí còn dễ dàng hơn, nếu bạn bắt đầu bằng cách định nghĩa một nguồn dữ liệu đối tượng trong cửa sổ 'Data Sources' trong VS. Sau đó, bạn có thể chỉ cần kéo các trường từ cửa sổ này vào biểu mẫu của bạn và kết nối dây-up được thực hiện tự động. Một 'BindingSource' và' BindingNavigator' được chèn tự động, nếu bạn làm như vậy. Sau đó, bạn có thể loại bỏ một cách an toàn 'BindingNavigator' nếu bạn không cần nó. –

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