2012-10-13 89 views
0

我想顯示一個顯示被邀請者信息的網格,以及 - 這是棘手的部分 - 指示他們收到哪些郵件的列。如何以表格形式顯示分層數據/ datagrid

舉例來說,像這樣的網格:

Firstname | Lastname | ReceivedMail1 | ReceivedMail2 

如果在應用程序中創建第三個郵件,我的網格,需要添加一列這樣的:

Firstname | Lastname | ReceivedMail1 | ReceivedMail2 | ReceivedMail3 

我的數據庫是關係型,所以有一些像person.receivedEmails和一系列電子郵件。

我正在尋找最佳做法來解決這個問題。我在WinForms應用程序的C#中工作,但我也需要這個。我正在考慮一個動態對象(儘管我不知道它對網格有多好),也可能是數據庫視圖。有什麼建議麼?

+0

現在考慮這個:[鏈接](http://www.simple-talk.com/sql/t-sql-programming/switching-rows-and-columns-in-sql/ ) –

回答

0

好吧,這就是我要如何去做的。 感謝Adding-properties-To-ExpandoObjectsBinding-ExpandoObjects-ToDatagrid

這裏有一個原型:

 dynamic obj = new ExpandoObject(); 
     obj.FirsName = "John"; 
     obj.LastName = "Doe"; 
     var x = obj as IDictionary<string, Object>; 
     for (int i = 0; i < 3; i++) 
     { 
      x["ReceivedMail_" + i] = true; 
     } 

     var data = new List<ExpandoObject>() { obj }; 
     this.dataGridView1.DataSource = data.ToDataTable(); 

使用該方法從第二連桿:

public static class DynamicIENumerableExtension 
{ 
    public static DataTable ToDataTable(this IEnumerable<dynamic> items) 
    { 
     var data = items.ToArray(); 
     if (data.Count() == 0) return null; 

     var dt = new DataTable(); 
     foreach (var key in ((IDictionary<string, object>)data[0]).Keys) 
     { 
      dt.Columns.Add(key); 
     } 
     foreach (var d in data) 
     { 
      dt.Rows.Add(((IDictionary<string, object>)d).Values.ToArray()); 
     } 
     return dt; 
    } 

結果是完全一樣我想要的。 :)

Result