In this article I will explain with an example, how to resolve the error: System.InvalidOperationException: 'ColumnCount property cannot be set on a data-bound DataGridView control.'.
 
 

Error

The following error occurs when you are specifying ColumnCount property in DataGridView and calling DataGridView columns design code more than once.
System.InvalidOperationException 'ColumnCount property cannot be set on a data-bound DataGridView control.'
 
 

Solution

Following are the solutions for the above error.
1. You need to specify the ColumnCount property and define the columns once in the Form Load event handler.
C#
private void Form1_Load(object sender, EventArgs e)
{
    //Set AutoGenerateColumns False.
     dataGridView1.AutoGenerateColumns = false;
 
    //Set Columns Count.
    dataGridView1.ColumnCount = 3;
 
    //Add Columns.
    dataGridView1.Columns[0].Name "CustomerId";
    dataGridView1.Columns[0].HeaderText "Customer Id";
    dataGridView1.Columns[0].DataPropertyName "CustomerId";
 
    dataGridView1.Columns[1].HeaderText "Name";
    dataGridView1.Columns[1].Name "Name";
    dataGridView1.Columns[1].DataPropertyName "Name";
 
    dataGridView1.Columns[2].Name "Country";
    dataGridView1.Columns[2].HeaderText "Country";
    dataGridView1.Columns[2].DataPropertyName "Country";
 
    this.BindGrid();
}
 
VB.Net
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'Set AutoGenerateColumns False.
     dataGridView1.AutoGenerateColumns = False
 
    'Set Columns Count.
    dataGridView1.ColumnCount = 3
 
    'Add Columns.
    dataGridView1.Columns(0).Name "CustomerId"
    dataGridView1.Columns(0).HeaderText "Customer Id"
    dataGridView1.Columns(0).DataPropertyName "CustomerId"
 
    dataGridView1.Columns(1).HeaderText "Name"
    dataGridView1.Columns(1).Name "Name"
    dataGridView1.Columns(1).DataPropertyName "Name"
 
    dataGridView1.Columns(2).Name "Country"
    dataGridView1.Columns(2).HeaderText "Country"
    dataGridView1.Columns(2).DataPropertyName "Country"
 
    Me.BindGrid()
End Sub
 
2. Clear the DataGridView binding i.e. set the DataSource property to NULL.
C#
dataGridView1.DataSource = null;
 
VB.Net
dataGridView1.DataSource = Nothing