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);