使用特殊类的多个DisplayMember

本文关键字:DisplayMember | 更新日期: 2023-09-27 18:20:16

我正在尝试获取一个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();

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

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

}`

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

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

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

如有任何帮助,我们将不胜感激。

谢谢。

使用特殊类的多个DisplayMember

是否设置DisplayMember和ValueMember属性?看看MSDN上的DataSource属性,看看他们是如何设置这三个属性的。

更新:

尝试切换此:

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

到此:

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

你试过这样设置DisplayMember和DisplayValue吗。其中"Name"/"Value"是Accommodation类中属性的名称。

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

更新:

确保textToShow实际上是一个Property,而不仅仅是一个公共字段。