如何使我的DataGridView等于我的List <list <decimal>&gt;?

时间:2016-01-28 15:06:49

标签: c# winforms datagridview

我有一个十进制列表列表,因此填写时它本质上是一个网格...

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;

但这不起作用。

这样的网格输出...... enter image description here

2 个答案:

答案 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)

您看到CapacityCount的原因是因为这些是List<T>公开的属性,GridView使用这些属性来显示

有多种方法可以实现,例如使用DataTable或者可以使用LINQ表达式来指定列名,如:

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

(您可以添加列数检查)

相关问题