Несколько DisplayMember, используя специальный класс - PullRequest
5 голосов
/ 13 января 2012

Я пытаюсь получить ListBox для отображения конкатенации нескольких строк таблицы Accommodation.

Поскольку я не могу редактировать источник данных, я подготовил класс AccommodationEntity, который содержит как оригинальный объект Accommodation, так и строку, которую я хочу отобразить в ListBox.

Однако по какой-то причине мне не удалось установить свойство DisplayMember ListBox, которое, таким образом, отображает 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 остается установленнымдо "".

Буду признателен за любую помощь.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 января 2012

Вы устанавливаете свойства DisplayMember и ValueMember ? Взгляните на свойство DataSource в MSDN, чтобы увидеть, как они устанавливают все три свойства.

UPDATE:

Попробуйте переключить это:

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";
3 голосов
/ 13 января 2012

Вы пытались установить DisplayMember и DisplayValue следующим образом. Где «Имя» / «Значение» - это название объекта в классе «Размещение».

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

UPDATE:

Убедитесь, что textToShow на самом деле является свойством, а не просто открытым полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...