我有一个十进制列表列表,因此填写时它本质上是一个网格...
2.0, 3.1, 4.0
3.2, 7.0, 1.4
6.0, 3.1, 8.8
List的代码......
List<List<decimal>> Rows = new List<List<decimal>>();
有没有一种简单的方法让我DataGridView显示这些数据,我试过......
DataGridView1.DataSource = Rows;
但这不起作用。
答案 0 :(得分: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);
答案 1 :(得分:2)
您看到Capacity
和Count
的原因是因为这些是List<T>
公开的属性,GridView
使用这些属性来显示值。
有多种方法可以实现,例如使用DataTable
或者可以使用LINQ表达式来指定列名,如:
dataGridView1.DataSource = Rows.Select(d => new
{
Col1 = d[0],
Col2 = d[1],
Col3 = d[2]
}).ToList();
(您可以添加列数检查)。