2012-01-13 23 views
5

Tôi đang cố gắng để có được một ListBox để hiển thị một nối của nhiều hàng của bảng Accommodation.Nhiều DisplayMember sử dụng lớp đặc biệt

Vì tôi không thể chỉnh sửa nguồn dữ liệu, tôi đã chuẩn bị một lớp, AccommodationEntity, chứa cả đối tượng Accommodation gốc và chuỗi tôi muốn ListBox hiển thị.

Tuy nhiên, vì một lý do nào đó, tôi không đặt thuộc tính DisplayMember của ListBox, do đó hiển thị jibber-jabber mặc định.

tôi thiết lập ListBox như sau:

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

Lớp cho các đối tượng được lưu trữ trong các nguồn dữ liệu trông như thế này:

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

} '

Và cuối cùng, có là phương pháp thực hiện một số tìm kiếm (trả về các đối tượng chính xác):

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

Tôi biết dataSource chứa dữ liệu phù hợp, nhưng vì một lý do nào đó, có vẻ như thuộc tính DisplayMember vẫn được đặt là "".

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn.

Trả lời

3

Bạn đã cố gắng đặt DisplayMember và DisplayValue như thế này chưa. Trong đó "Tên"/"Giá trị" là tên của thuộc tính trong lớp Chỗ ở.

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

UPDATE:

Hãy chắc chắn rằng textToShow thực sự là một tài sản, chứ không phải chỉ là một lĩnh vực công cộng.

+0

Xin lỗi tôi quên đề cập đến, tôi làm điều đó khi biểu mẫu khởi bằng cách sử dụng accommodationList .DisplayMember = "textToShow"; nơi textToShow là tên của thuộc tính chứa chuỗi Tôi muốn hiển thị – Ondrej

+0

@Ondrej: Nếu bạn đang thiết lập các thuộc tính như bạn có nghĩa vụ, có lẽ đăng một số mã cho các lớp có liên quan khác. Có lẽ một cái gì đó không được thiết lập chính xác cho họ. –

+0

cập nhật bài đăng giới thiệu – Ondrej

4

Bạn có đang đặt các thuộc tính DisplayMemberValueMember không? Có một cái nhìn tại các tài sản DataSource trên MSDN để xem cách chúng được thiết lập tất cả ba tài sản.

UPDATE:

Hãy thử chuyển đổi này:

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

này:

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

xem bình luận cuối cùng của tôi, nhưng tôi vẫn hiển thị giá trị mặc định – Ondrej

+2

@Ondrej: Điều gì sẽ xảy ra nếu bạn đặt thuộc tính 'ValueMember' và' DisplayMember' sau khi bạn liên kết danh sách với 'DataSource'. Vì vậy, không làm điều đó trong intitializer mẫu, nhưng làm điều đó ngay sau dòng 'accomodationList.Datasource = relatedAccomodations; ' –

+0

nếu tôi thiết lập DisplayMember như bạn đề nghị, không có gì thay đổi, nếu tôi đặt ValueMember là tốt, tôi nhận được sau đây lỗi: Không thể liên kết với thành viên hiển thị mới. Tên thông số: newDisplayMember – Ondrej

Các vấn đề liên quan