多个DisplayMember使用特殊类

Ond*_*rej 5 c# data-binding winforms

我试图让ListBox显示多行表的串联Accommodation.

因为我无法编辑数据源,所以我准备了一个类,AccommodationEntity它包含原始Accommodation对象和我希望ListBox显示的字符串.

但是,由于某种原因,我无法设置ListBox的DisplayMember属性,因此显示默认的jibber-jabber.

我按如下方式设置了列表框:

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

存储在数据源中的对象的类如下所示:

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 + ")";
    }
}
Run Code Online (Sandbox Code Playgroud)

}

最后,有一种方法可以进行一些搜索(返回正确的对象):

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;
}
Run Code Online (Sandbox Code Playgroud)

我知道dataSource包含正确的数据,但由于某种原因,似乎DisplayMember属性仍然设置为"".

任何帮助,将不胜感激.

谢谢.

RBD*_*Dev 3

您是否尝试像这样设置 DisplayMember 和 DisplayValue ?其中“名称”/“值”是住宿类中的属性名称。

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

更新:

确保textToShow它实际上是一个财产,而不仅仅是一个公共领域。