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

Ahora, ¿cómo configuro el elemento del cuadro combinado en otra cosa que no sea la primera en la lista? Probado comboBox.SelectedItem = someCustomer; ... y un montón de otras cosas, pero sin suerte hasta ahora ...Establecer SelectedItem en un cuadro combinado vinculado a la fuente de datos

Respuesta

9

que debe hacer

comboBox.SelectedValue = "valueToSelect"; 

o

comboBox.SelectedIndex = n; 

o

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

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

+0

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

2

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; 
+0

Con eso se bloquea en comboBox.ValueMember = "id"; ¿por alguna razón? – mdc

+2

Le sugiero que agregue 'BindingSource' como un componente a su formulario en el diseñador (consulte la sección' Datos' de 'Toolbox'). Luego puede establecer todas estas propiedades a través de la ventana de propiedades. Es incluso más fácil si comienza definiendo una fuente de datos de objeto en la ventana 'Orígenes de datos' en VS. Luego puede simplemente arrastrar los campos de esta ventana a su formulario y el enlace de enlace se realiza automáticamente. Un 'BindingSource' y un' BindingNavigator' se insertan automáticamente, si lo hace. Luego, puede eliminar de forma segura el 'BindingNavigator' si no lo necesita. –

Cuestiones relacionadas