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

本文关键字:设置 DataGridView 源代码 动态 | 更新日期: 2023-09-27 18:30:44

我有一些存储数据列表

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

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

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

这里的问题是(显然)DataGridView 数据源属性不知道如何显示List<List<string>>。 一种方法是将列表合并到一个对象中,DataGridView 可以绑定到该对象。 以下是实现此目的的几种方法:

到数据表:

为了将您的List<List<string>>转换为数据表,我借用了此处找到的代码并创建了以下扩展方法:

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:

dataGridView.DataSource = data.ToDataTable();

对于匿名类型列表:

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

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

我们需要匿名类型,因为如果没有一点帮助,DataGridView 将无法在 List 属性中显示字符串值,如此处所述。


当然,这两种方法都有缺点,但我相信这些方法是您的最佳选择。

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

正如一些海报所说,这是针对Windows表单的,在这种情况下,您可以(根据MSDN)JST设置Datasurce而不是Databind