如何在C#中动态设置DataGridView的源代码?

时间:2012-04-11 23:00:01

标签: c# datagridview

我有一些存储数据列表

List<List<string>> data = new List<List<string>>();

如何正确地将其分配给dataGridView.DataSource

2 个答案:

答案 0 :(得分:1)

List<List<string>> data = new List<List<string>>();
dataGridView.DataSource = data;
dataGridView.Databind();

正如一些海报所说,这是针对Windows窗体的,在这种情况下你可以(根据MSDN)jst设置数据而不是数据绑定

答案 1 :(得分:1)

这里的问题是(显然)DataGridView DataSource属性不知道如何显示List<List<string>>。一种方法是将您的列表组合到DataGridView可以绑定到的一个对象中。以下是几种方法:

到DataTable:

要将List<List<string>>转换为DataTable,我借用了here找到的代码并创建了此扩展方法:

static class ListExtensions { 
    public static DataTable ToDataTable(this List<List<string>> list) { 
        DataTable tmp = new DataTable();
        tmp.Columns.Add("MyData");
        // Iterate through all List<string> elements and add each string value to a new DataTable Row.        
        list.ForEach(lst => lst.ForEach(s => tmp.Rows.Add(new object[] {s})));

        return tmp; 
    } 
}

现在,您可以使用此扩展方法从List<List<string>>获取可绑定到DataGridView的DataTable:

dataGridView.DataSource = data.ToDataTable();

以匿名类型列表:

以下是执行此操作的代码:

dataGridView.DataSource = data.SelectMany(lst => lst)
                              .Select(s => new { Value = s }).ToList();

我们需要匿名类型,因为如果here所述,DataGridView将无法在没有任何帮助的情况下在List属性中显示字符串值。


这些方法当然有缺点,但我相信这些方面的东西是你最好的选择。