2015-05-21 24 views
0

我綁定了Devexpress gridcontrol,它從一個從一個到多個關聯表中獲取數據的列表中進行綁定。我的意思是,我有許多「analiseID」的「nID」。如何在GridView中顯示一對多關係表中的綁定項目

的GridView顯示一個記錄下其他的像這樣:

的NID Analises

2  A 
2  C 
2  D 
3  A 
3  C 

...

我需要GridView控件來顯示數據;每個nID只有一個記錄在表中分析它的分析結果,並且它的分析將帶有以分析名稱檢查的複選框。分析名稱將位於gridview的標題部分。分析字段將在其nID附近顯示。就像這樣:

nID A B C D E ..(共34個analises)

2 checked    checked  checked 
3 checked    checked 

我結合gridcontrol這樣的:

  List<nAnalises> lst = new List<nAnalises>(); 
      SqlDataReader sdr = cmd.ExecuteReader(); 
      while (sdr.Read()) 
      { 
       nAnalises na = new nAnalises(); 
       na.nID = Convert.ToInt32(sdr["nID"]); 
       na.rNumber = Convert.ToInt32(sdr["rNumner"]); 
       na.nName = sdr["nName"].ToString(); 
       na.analiseID = Convert.ToInt32(sdr["analiseID"]); 
       na.analiseName = sdr["analiseName"].ToString(); 

       lst.Add(na); 
      } 
      gridControl1.DataSource = lst; 

請給我的想法。謝謝。

回答

0

您必須創建一個Datatable.列數將是您的分析的計數 然後,您必須爲每個nID添加1行並設置每列的值。

下面是一個代碼示例

List<nAnalises> lst = new List<nAnalises>(); 
lst.Add(new nAnalises() { Id = 2, Name = "A" }); 
lst.Add(new nAnalises() { Id = 2, Name = "D" }); 
lst.Add(new nAnalises() { Id = 3, Name = "A" }); 
lst.Add(new nAnalises() { Id = 3, Name = "C" }); 


Dictionary<int, string[]> values = 
       (from i in lst 
       group i by i.Id into g 
       select new { 
          Id = g.Key, 
          Values = g.Select(ee => ee.Name).Distinct().ToArray() 
          } 
      ).ToDictionary(ee => ee.Id, ee => ee.Values); 


DataTable table = new DataTable(); 
table.Columns.Add("ID"); 
foreach (var item in values.Values.SelectMany(EE => EE).Distinct()) 
    table.Columns.Add(item); 


foreach (var item in values) 
{ 
    DataRow row = table.NewRow(); 

    foreach (DataColumn column in table.Columns) 
    { 
      row[column.ColumnName] = false; 
      foreach (var value in item.Value) 
       if (value == column.ColumnName) 
        row[value] = column.ColumnName == value; 

    } 
    row["ID"] = item.Key; 
    table.Rows.Add(row); 
} 

然後

grid.Datasource=table; 

,如果你想看到控制檯上的表,你可以使用這個

foreach (DataColumn col in table.Columns) 
     Console.Write(string.Format("{0,10}", col.ColumnName) + " "); 
Console.WriteLine(); 
foreach (DataRow row in table.Rows) 
{ 
    foreach (DataColumn col in table.Columns) 
     Console.Write(string.Format("{0,10}", row[col.ColumnName]) + " "); 
    Console.WriteLine(); 
} 

上面的例子打印

ID   A   D   C 
    2  True  True  False 
    3  True  False  True 
+0

謝謝你的回答。我實際上使用List <>作爲數據源。所以,我無法應用你的代碼。我更新了我的問題。你可以看一下嗎? – linda22

+0

Updated.I只更改字典的創建。 –

+0

It Works,謝謝!而且,如果我需要顯示更多列,該怎麼辦? Dictionary只有int和string。我有更多的列,如nName,rName,來自類的rNumber。 – linda22

相關問題