How to suspend a DataGridView while updating its columns
You can use VirtualMode with DataGridView in order to very efficiently update the grid. See this article: http://msdn.microsoft.com/en-us/library/ms171622.aspx
From what I remember, it seems to update the entire collection before updating anything on the UI, as opposed to adding to the UI for each new row added/etc.
You could try and prevent it from completely redrawing by using the code in this post. The parent
would be the parent of the dataGridView1
.
In my case suspend and resume layout did not work. I resolved disabling the dataGridView (dgv.Enabled = false
) before update and re-enabling it (dgv.Enabled = true
) at the end of the update process.
You may want to consider using the AddRange method instead of Add. The Data Grid behaves a little better when you add them all at once.
DataGridViewColumn[] columns = new DataGridViewColumn[dt.Columns.Count];
for (int i = 0; i < dt.Columns.Count; i++ )
{
DataColumn c = dt.Columns[i];
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.SortMode = DataGridViewColumnSortMode.NotSortable;
col.DataPropertyName = c.ColumnName;
col.HeaderText = c.Caption;
columns[i] = col;
}
dataGridView1.Columns.AddRange(columns);