2012-12-18 18 views
0

我有一個DataGridView使用CoolStorage(ORM)CSList類作爲它的DataSource填充。它顯示聯繫人,它是ContactType列,而不是顯示底層的ContactTypeName,只是顯示每個記錄的「ContactType」。DGV DataSource顯示類名不值

雖然在DataSource上懸停時我可以看到它有ContactTypeName作爲ContactType屬性可用,但無法通過逐行查看數據綁定來更改該單元格的值。

有沒有一種方法可以更改在ContactType單元格中顯示的值(我在想像與ComboBox的DisplayMember等效的東西)而無需從結果集中手動構建DataTable?

非常感謝。

回答

3

唯一的 我知道的一種不用手動設置列的方法是覆蓋ContactType類的ToString()函數。

如果你想編輯但是,你需要手動設置列。

幾乎所有我工作過的網格界面都需要手動設置colums,這是因爲某種原因。

另一種替代方法是綁定到一個包裝類(基本上是一個ViewModel),該類將聯繫人名稱公開爲屬性而不是相關對象。你甚至可以用該模型進行雙向綁定。

+0

完善,設置的ToString()的伎倆。非常感謝! – CrazyHorse

1

您是否考慮過使用CSListGeneric而不是CSList

然後可以使用System.Linq來選擇要顯示在DataGridView什麼:在該類

class Program 
{ 
    class ContactType 
    { 
     public string Name { get; set; } 
    } 
    class Contact 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public ContactType ContactType { get; set; } 
    } 
    static void Main(string[] args) 
    { 
     CSList<Contact> contacts = new CSList<Contact>(); 
     //add contacts to the list 
     var x = from c in contacts 
       select new { 
        c.Id, 
        c.Name 
        ContactTypeName=c.ContactType.Name 
       }; 
    } 
} 
+0

我沒有想到這一點,但這是一個很好的建議,在查詢結果上使用Linq。我將來肯定會考慮這一點 – CrazyHorse