2010-11-10 33 views
7

Tôi cần phải ràng buộc một List<MyClass> myList đến DataGridView. Và nhận được trong bảng kết quả với hai cột ID và Tên.Danh sách liên kết các lớp học vào DataGridView

đoạn Code:

private List<MyClass> myList = new List<MyClass>(){...}; 

public void BindClass() 
{ 
    dataGridView.DataSource = myList; 
} 

public MyClass 
{ 
    public MyDataClass Data{ get; set; } 
} 

public MyDataClass 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
} 

Có thể?

+0

Bạn vừa đặt câu hỏi chính xác. Xóa cái này. Và chỉnh sửa phần trước nếu cần. Chỉnh sửa: Tôi thấy bạn đã xóa trước đó. Đó không phải là cách chính xác như mọi người đã cố giúp bạn, câu trả lời giờ đã biến mất. – leppie

+0

Xin lỗi .. câu hỏi trước đó là không chính xác .. – Yuriy

+0

Có tôi có một downvote mà không có lý do và bạn đã xóa câu hỏi. –

Trả lời

17

Làm thế nào về gắn vào một loại vô danh:

public void BindClass() 
{ 
    dataGridView1.DataSource = myList.Select(myClass => new {myClass.Data.ID, myClass.Data.Name}).ToList(); 
} 

Bạn sẽ được cập nhật dữ liệu trong datagridview?

+1

WOW, Giải pháp rất thanh lịch! Cảm ơn! – Yuriy

+0

có bệnh đang được cập nhật. chúng ta nên làm gì ? (để tham khảo thêm cho những người dùng khác.) –

0

Không, bạn không thể thực hiện việc này ra khỏi hộp. Bạn sẽ phải viết một nguồn ràng buộc tùy chỉnh (rất có thể với logic chuyên ngành cho mục đích cụ thể của bạn) để cho phép 'khoan' sâu hơn chỉ là một mức độ thuộc tính.

2

Để làm điều đó mà không cần thay đổi mô hình là đặc biệt khó khăn (nhưng có thể), đòi hỏi ICustomTypeDescriptor hoặc TypeDescriptionProvider, và một tùy chỉnh PropertyDescriptor. Thành thật mà nói: không đáng.

Chỉ cần thêm các thuộc tính pass-thru:

public MyClass 
{ 
    public MyDataClass Data{get; set;} 
    [DisplayName("ID")] 
    public string DataID { 
    get {return Data.ID;} 
    set {Data.ID = value;} 
    } 
    [DisplayName("Name")] 
    public string DataName { 
    get {return Data.Name;} 
    set {Data.Name = value;} 
    } 
} 
+0

Có, giải pháp này diễn ra :) – Yuriy

+0

Hmmm, tôi chưa bao giờ nghĩ về việc này trực tiếp thông qua TypeDescriptor, nó có thể dễ dàng hơn một chút so với tuyến BindingSource mà tôi đã chụp :) – leppie

+0

@leppie - nó vẫn là những thứ khá tiên tiến, mặc dù –

1

Thật dễ dàng với LINQ như bạn có thể nhìn thấy trong This answer

Dưới đây là một việc thực hiện đơn giản của một cái gì đó tôi cần để đính kèm vào datagridview.

 DataGridView1.DataSource = _ 
(From i In ItemList Select i.ListID, i.FullName, i.PurchaseDesc, i.EditSequence).ToList 
Các vấn đề liên quan