2016-01-28 30 views
2

我有小數列表的列表,所以充滿時,它本質上是一個網格...我怎麼做我的DataGridView等於我的列表<列表<decimal>>?

2.0, 3.1, 4.0 
3.2, 7.0, 1.4 
6.0, 3.1, 8.8 

的列表的代碼...

List<List<decimal>> Rows = new List<List<decimal>>(); 

有一種簡單的方式讓我DataGridView顯示這個數據,我試過...

DataGridView1.DataSource = Rows; 

但是這沒有奏效。

電網輸出這樣的... enter image description here

+1

什麼樣的應用,你瞄準,Windows窗體?是否有任何錯誤,你得到什麼,你的意思是沒有工作。 – Habib

+0

@Habib我編輯過。 – user3755946

+0

更多問題:您的列表中是否都有相同大小的列表? – Vasilievski

回答

4

的一種方式做,這是對列表的列表轉換爲DataTable對象,然後將其設置爲DataSource財產。這裏是做這樣的轉換方法的一個例子:

public DataTable CreateDataTable(List<List<decimal>> data) 
{ 
    DataTable table = new DataTable(); 

    if (data.Count == 0) 
     return table; 

    int fields = data[0].Count; 

    for (int i = 0; i < fields; i++) 
    { 
     table.Columns.Add("column" + (i + 1), typeof (decimal)); 
    } 

    foreach (var list in data) 
    { 
     var row = table.NewRow(); 

     for (int i = 0; i < fields; i++) 
     { 
      row.SetField(i, list[i]); 
     } 

     table.Rows.Add(row); 
    } 

    return table; 
} 

然後就可以設置DataSource屬性是這樣的:

DataGridView1.DataSource = CreateDataTable(Rows); 
+0

的偉大工程的感謝。 – user3755946

+0

不客氣 –

2

你看到CapacityCount的原因是因爲這些都是屬性由List<T>露出,並且這些性質通過GridView用於顯示使用。

有做這件事的多種方式,比如使用DataTable或者你可以使用LINQ表達式來像指定列名:

dataGridView1.DataSource = Rows.Select(d => new 
           { 
            Col1 = d[0], 
            Col2 = d[1], 
            Col3 = d[2] 
           }).ToList(); 

(您可能會增加對列計數檢查)

相關問題