我看到人们使用下面的代码一次添加许多列。这是代码
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()
函数。我的目的是一次添加所有列,而不是添加循环。
答案 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));
它只是另一种解决方案的例子。在我看来,您当前初始化此列表的方法是完全正确的。