2012-01-13 20 views
5

Birden çok tablo satırı Accommodation bir birleştirme görüntülemek için bir ListBox almaya çalışıyorum.Çoklu DisplayMember özel sınıf kullanarak

Veri kaynağını düzenleyemediğim için, hem orijinal Accommodation nesnesini hem de ListBox'un görüntülenmesini istediğim dizeyi içeren bir sınıf hazırladım, AccommodationEntity.

Ancak, bazı nedenlerden ötürü, varsayılan jibber-jabber'i görüntüleyen ListBox'un DisplayMember özelliğini ayarlayamıyorum. aşağıdaki gibi

ben listbox kurmak:

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

veri kaynağı saklanan nesneler için sınıf şuna benzer:

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

} `

Ve nihayet, orada bazı arama yapan (doğru nesneleri döndüren) bir yöntemdir:

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

Veri kaynağının doğru verileri içerdiğini biliyorum, ancak bazı nedenlerle, DisplayMember özelliği "" olarak ayarlanmış gibi görünüyor.

Herhangi bir yardım için teşekkür ederiz.

Teşekkürler.

cevap

3

Bu şekilde DisplayMember ve DisplayValue ayarlamayı denediniz mi? "Ad"/"Değer", Konaklama sınıfındaki özelliğin adıdır.

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

GÜNCELLEME:

textToShow aslında bir Mülkiyet, sadece bir kamu alanı olduğundan emin olun.

+0

Üzgünüm, yapmam form accommodationList kullanarak başlatır .DisplayMember = "textToShow"; textToShow, görüntülemek istediğim dizeyi içeren özelliğin adıdır. – Ondrej

+0

@Ondrej: Özellikleri sizin ayarlayacağınız şekilde ayarlıyorsanız, belki de diğer ilgili sınıflar için kodun bir kısmını yayınlayın. Belki onlar için doğru bir şey ayarlanmamıştır. –

+0

, intran gönderimini güncelledi – Ondrej

4

DisplayMember ve ValueMember özelliklerini ayarlıyor musunuz? Her üç özelliği nasıl ayarladıklarını görmek için MSDN'deki DataSource özelliğine bakın.

GÜNCELLEME: Buna

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

:

deneyin bu anahtarlama ben söylemeyi unutmuşum

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

son yorumuma bakın, yapıyorum, ancak hala varsayılan değeri gösterir – Ondrej

+2

@Ondrej: Listeyi "DataSource" öğesine bağladıktan sonra "ValueMember" ve "DisplayMember" özelliklerini ayarlarsanız ne olur? Yani formu intitializer yapmayın, ama doğru satır 'AccomodationList.Datasource = relatedAccomodations sonra yap' –

+0

Eğer önermek gibi DisplayMember kurmak, hiçbir şey değiştirirseniz, ben de ValueMember ayarlamak, aşağıdakileri olsun hata: Yeni ekran üyesine bağlanılamıyor. Parametre adı: newDisplayMember – Ondrej