2012-01-13 19 views
5

Estoy tratando de hacer que un ListBox muestre una concatenación de varias filas de la tabla Accommodation.Multiple DisplayMember usando la clase especial

Como no puedo editar la fuente de datos, preparé una clase, AccommodationEntity, que contiene tanto el objeto original Accommodation como la cadena que deseo que muestre ListBox.

Sin embargo, por alguna razón, no configuro la propiedad DisplayMember de ListBox, que muestra así el jibber-jabber predeterminado.

puedo configurar el cuadro de lista de la siguiente manera:

accommodationList.DisplayMember = "textToShow"; 
// load and set up accommodation 
List<AccommodationEntity> relatedAccommodations = 
    dt.listHolidayAccommodation(relatedHoliday); 
accommodationList.DataSource = relatedAccommodations; 
accommodationList.Refresh(); 

La clase de los objetos almacenados en la fuente de datos es el siguiente:

class AccommodationEntity 
{ 
    public accommodation classicAccommodation; 
    public string textToShow; 

    public AccommodationEntity(stay relatedStay) 
    { 
     this.classicAccommodation = relatedStay.accommodation; 

     string from = relatedStay.dateFrom.ToString(); 
     string to = relatedStay.dateTo.ToString(); 
     string city = relatedStay.accommodation.location.ToString(); 
     string hotelName = relatedStay.accommodation.name.ToString(); 

     this.textToShow = hotelName + ", " + city + " (" + from + " - " + to + ")"; 
    } 
} 

} `

Y, por último, hay es un método que realiza algunas búsquedas (devuelve los objetos correctos):

public List<AccommodationEntity> listHolidayAccommodation(holiday selectedHoliday) 
{ 
    List<AccommodationEntity> ubytovani = new List<AccommodationEntity>(); 

    var stays = from singleStay in selectedHoliday.stays 
       select singleStay; 

    foreach (stay singleStay in stays) 
    { 
     AccommodationEntity newStay = new AccommodationEntity(singleStay); 
     ubytovani.Add(newStay); 
    } 

    return ubytovani; 
} 

Sé que dataSource contiene los datos correctos, pero por alguna razón, parece que la propiedad DisplayMember permanece establecida en "".

Cualquier ayuda sería apreciada.

Gracias.

Respuesta

3

¿Intentó establecer DisplayMember y DisplayValue de esta manera? Donde "Nombre"/"Valor" es el nombre de la propiedad en la clase de Alojamiento.

List<AccommodationEntity> relatedAccommodations = dt.listHolidayAccommodation(relatedHoliday); 
accommodationList.DataSource = relatedAccommodations; 
accommodationList.DisplayMember = "Name"; 
accommodationList.ValueMember = "Value"; 

ACTUALIZACIÓN:

Asegúrese textToShow es en realidad una propiedad, no sólo un campo público.

+0

En este momento se me olvidó mencionar, yo que cuando la forma inicializa mediante el uso de accommodationList .DisplayMember = "textToShow"; donde textToShow es el nombre de la propiedad que contiene la cadena que quiero mostrar – Ondrej

+0

@Ondrej: Si está configurando las propiedades como debería, quizás publique algo del código para las otras clases relevantes. Tal vez algo no está siendo configurado correctamente para ellos. –

+0

actualizó la publicación de introducción – Ondrej

4

¿Está estableciendo las propiedades DisplayMember y ValueMember? Eche un vistazo a la propiedad DataSource en MSDN para ver cómo están configurando las tres propiedades.

ACTUALIZACIÓN:

trate de cambiar esto:

accommodationList.DisplayMember = "textToShow"; 
// load and set up accommodation 
List<AccommodationEntity> relatedAccommodations = 
    dt.listHolidayAccommodation(relatedHoliday); 
accommodationList.DataSource = relatedAccommodations; 

a esto:

// load and set up accommodation 
List<AccommodationEntity> relatedAccommodations = 
    dt.listHolidayAccommodation(relatedHoliday); 
accommodationList.DataSource = relatedAccommodations; 
accommodationList.DisplayMember = "textToShow"; 
+0

vea mi último comentario, sí, pero aún muestra el valor predeterminado – Ondrej

+2

@Ondrej: ¿Qué ocurre si establece las propiedades 'ValueMember' y' DisplayMember' después de vincular la lista al 'DataSource'. Así que no lo haga en el intitializador de formularios, pero hágalo justo después de la línea 'accomodationList.Datasource = relatedAccomodations;' –

+0

si configuro DisplayMember como sugiere, nada cambia, si configuro ValueMember también, obtengo lo siguiente error: No se puede vincular al nuevo miembro de la pantalla. Nombre del parámetro: newDisplayMember – Ondrej

Cuestiones relacionadas