如何使用AddRange c#将数据列添加到datagridview

时间:2015-07-17 11:01:51

标签: c# winforms datagridview

我看到人们使用下面的代码一次添加许多列。这是代码

        var col3 = new DataGridViewTextBoxColumn();
        var col4 = new DataGridViewCheckBoxColumn();

        col3.HeaderText = "Column3";
        col3.Name = "Column3";

        col4.HeaderText = "Column4";
        col4.Name = "Column4";

        dataGridView1.Columns.AddRange(new DataGridViewColumn[] {col3,col4});

但我的情况有点不同。这样我就会在循环中向datagridview添加列。

foreach (DataColumn column in retriever.Columns)
{
    dataGridView1.Columns.Add(column.ColumnName, column.ColumnName);
}

任何人都可以告诉我如何修改上面的代码以使用addrange() instead of add()函数。我的目的是一次添加所有列,而不是添加循环。

3 个答案:

答案 0 :(得分:1)

试试这个:

DataGridViewColumn[] column_array = new DataGridViewColumn[retriever.Columns.Count];

    for (int cnt = 0;cnt < retriever.Columns.Count;cnt++)
    {
        DataGridViewColumn col = new DataGridViewColumn();
        col.Name = retriever.Columns[cnt].Name;
        col.HeaderText = retriever.Columns[cnt].HeaderText;
        column_array[cnt] = col;
    }

     dataGridView1.Columns.AddRange(column_array);

答案 1 :(得分:1)

您可以将代码更改为:

DataGridViewColumn[] arr = 
retriever.Columns.Select(d=>new DataGridViewColumn()
{Name = d.ColumnName,HeaderText = d.ColumnName}).ToArray();
dataGridView1.Columns.AddRange(arr);

答案 2 :(得分:0)

您可以使用linq Select声明:

dataGridView1.Columns.AddRange(retriever.Columns.Cast<DataColumn>().Select(n => new DataGridViewColumn
{
    Name = n.ColumnName,
    HeaderText = n.ColumnName
}));  

但最优化的是foreach:

retriever.Columns.Cast<DataColumn>().ToList().ForEach(n => dataGridView1.Columns.Add(n.ColumnName, n.ColumnName));

它只是另一种解决方案的例子。在我看来,您当前初始化此列表的方法是完全正确的。