2010-04-20 8 views
46

¿Cuál es la forma más simple de vincular un Listbox a una lista de objetos?Encuadernación Listbox a la lista <object>

+8

¿cuál es su plataforma? Silverlight? WPF? Winforms? ASP.NET? la respuesta depende un poco de este conocimiento. –

Respuesta

56

Usted está buscando el DataSource property:

List<SomeType> someList = ...; 
myListBox.DataSource = someList; 

También debe establecer la propiedad DisplayMember al nombre de una propiedad en el objeto que desea que el cuadro de lista que se vea. Si no lo hace, llamará al ToString().

+0

¿Qué debo hacer para eliminar un elemento de SomeType del Listbox a través de la selección? – cam

+0

'someList.Remove ((SomeType) myListBox.SelectedValue);' (En WinForms) – SLaks

+5

Hola. Me funciona, siempre y cuando no agregue nada a la colección. Tan pronto como cambio los elementos de mi colección en el cuadro de lista, no se actualiza. Incluso después de asignar dataSource después de cambiar elementos en la colección. – Hooch

4

Por supuesto, esto no va a ofrecerle nada verdaderamente significativo a menos que los objetos han anulado correctamente ToString() (o en realidad no estás trabajando con una lista genérica de los objetos y se puede unir a campos específicos):

List<object> objList = new List<object>(); 

// Fill the list 

someListBox.DataSource = objList; 
14

Fingir que está visualizando una lista de objetos con los clientes "customerName" y propiedades "customerId":

listBox.DataSource = customerListObject; 
listBox.DataTextField = "customerName"; 
listBox.DataValueField = "customerId"; 
listBox.DataBind(); 

Editar: sé que esto funciona en asp.net - si usted está haciendo una aplicación de Windows Forms, lo que debería ser bastante similar (espero ...)

+1

Windows.Forms.Listbox tiene otros miembros; vea abajo. – surfmuggle

1

Hay dos rutas Nain aquí:

1: listBox1.DataSource = yourList;

hacer ninguna manipulación de (Añadir/Eliminar) para yourList y volver a enlazar.
Establezca DisplayMember y valueMember para controlar lo que se muestra.

2: lsitBox1.Items.AddRange(yourList.ToArray());

(o utilizar un bucle para hacer Items.Add(...))

Puede controlar la exhibición por la sobrecarga ToString() de los objetos de la lista o implementando el evento listBox1.Format.

11

Encuadernación un control de System.Windows.Forms.Listbox a una lista de objetos (aquí de tipo dinámico)

List<dynamic> dynList = new List<dynamic>() { 
      new {Id = 1, Name = "Elevator", Company="Vertical Pop" }, 
      new {Id = 2, Name = "Stairs", Company="Fitness" } 
}; 

listBox.DataSource = dynList; 
listBox.DisplayMember = "Name"; 
listBox.ValueMember = "Id"; 
1

ListBox1.DataSource = CreateDataSource(); 
 
ListBox1.DataTextField = "FieldProperty"; 
 
ListBox1.DataValueField = "ValueProperty";

favor refiérase a this artículo para ejemplos detallados.

0

me refugio 't visto aquí, así que lo pongo porque para mí es la mejor manera en winforms:

List<object> objList = new List<object>(); 

    listBox.DataSource = objList ; 

    listBox.Refresh(); 
    listBox.Update();    
Cuestiones relacionadas