Su código de enlace no está completo. Prueba esto:
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";
En la mayoría de los casos se puede realizar esta tarea en el diseñador, en lugar de hacerlo en el código.
Comience agregando una fuente de datos en la ventana "Orígenes de datos" en Visual Studio. Ábralo desde el menú Ver> Otras ventanas> Fuentes de datos. Agregue un origen de datos Objeto del tipo Customer
. En las fuentes de datos, verá las propiedades del cliente. Al hacer clic con el botón derecho en las propiedades, puede cambiar el control predeterminado asociado a él.
Ahora puede simplemente arrastrar una propiedad desde la ventana Orígenes de datos a su formulario. Visual Studio agrega automáticamente A BindingSource
y un componente BindingNavigator
a su formulario cuando suelta el primer control. El BindingNavigator
es opcional y puede eliminarlo de manera segura, si no lo necesita. Visual Studio también hace todo el cableado. Puede ajustarlo a través de la ventana de propiedades. A veces esto es obligatorio para los cuadros combinados.
Sólo hay una cosa por hacer en el código: Asignar una fuente de datos real al origen de enlace:
customerBindingSource.DataSource = _customers;
comboBox.Items [n] .Selected = true; no funciona para mí (podría ser un problema de CF) pero SelectedValue sí, lo intenté antes pero con el valor incorrecto. Gracias. – mdc
Me gustaría señalar que para que esto funcione, tuve que especificar el campo que era el miembro de valor, no solo el objeto. Entonces, en el caso de clientes anteriores, tuve que usar 'comboBox.SelectedValue = customerToSelect.id'. – AdamMc331