2012-01-13 10 views
5

Sto cercando di ottenere un ListBox per visualizzare una concatenazione di più righe della tabella Accommodation.Multiple DisplayMember utilizzando la classe speciale

Poiché non riesco a modificare l'origine dati, ho preparato una classe, AccommodationEntity, che contiene sia l'oggetto originale Accommodation sia la stringa che desidero visualizzare.

Tuttavia, per qualche motivo, non riesco a impostare la proprietà DisplayMember del ListBox, che visualizza quindi il jibber-jabber predefinito.

Ho creato la casella di riepilogo come segue:

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

La classe per gli oggetti memorizzati nell'origine dati è simile al seguente:

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 + ")"; 
    } 
} 

} `

E infine, c'è è un metodo che esegue una ricerca (restituendo oggetti corretti):

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; 
} 

So che dataSource contiene i dati corretti, ma per qualche motivo, sembra che la proprietà DisplayMember sia impostata su "".

Qualsiasi aiuto sarebbe apprezzato.

Grazie.

risposta

3

Si è tentato di impostare DisplayMember e DisplayValue in questo modo. Dove "Nome"/"Valore" è il nome della proprietà nella classe Accomodation.

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

UPDATE:

Assicurarsi textToShow è in realtà una proprietà, non solo un campo pubblico.

+0

dispiace ho dimenticato di dire, lo faccio quando il modulo inizializza utilizzando alloggioLista .DisplayMember = "textToShow"; dove textToShow è il nome della proprietà contenente la stringa che desidero visualizzare – Ondrej

+0

@Ondrej: Se si impostano le proprietà come si suppone, è possibile inserire parte del codice per le altre classi pertinenti. Forse qualcosa non viene impostato correttamente per loro. –

+0

aggiornato il post di introduzione – Ondrej

4

Stai impostando le proprietà DisplayMember e ValueMember? Dai un'occhiata alla proprietà DataSource su MSDN per vedere come stanno impostando tutte e tre le proprietà.

UPDATE:

prova a cambiare questo:

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

a questo:

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

vedere il mio ultimo commento, lo faccio, ma visualizza ancora il valore predefinito – Ondrej

+2

@Ondrej: Cosa succede se si impostano le proprietà 'ValueMember' e' DisplayMember' dopo aver associato l'elenco a 'DataSource'. Quindi non farlo nella forma inizializzatore, ma fallo subito dopo la riga 'accomodationList.Datasource = relatedAccomodations;' –

+0

se imposto DisplayMember come suggerisci, non cambia nulla, se imposto anche ValueMember, ottengo il seguente errore: Impossibile collegarsi al nuovo membro di visualizzazione. Nome parametro: newDisplayMember – Ondrej

Problemi correlati