Step 1: Write the Following code in the binding event of data GridView

DataGridViewCheckBoxColumn chbx_Column = new DataGridViewCheckBoxColumn();

chbx_Column.Name = "chk_column";

chbx_Column.HeaderText = "";

chbx_Column.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;

dataGridView1.Columns.Add(chbx_Column);

//Select cell where checkbox to be display

Rectangle rect = this.dataGridView1.GetCellDisplayRectangle(0, -1, true); //0 Column index -1(header row) is row index

//Mention size of the checkbox

chkbox.Size = new Size(18, 18);

//set position of header checkbox where to places

rect.Offset(40, 2);

chkbox.Location = rect.Location;

chkbox.CheckedChanged += chkBoxChange;

//Add CheckBox control to datagridView

this.dataGridView1.Controls.Add(chkbox);

// for adding combo box in header

Rectangle rect = this.dataGridView1.GetCellDisplayRectangle(0, -1, true); //0 Column index -1(header row) is row index

ComboBox c = new ComboBox();

c.BackColor = Color.FromArgb(246, 246, 246);

c.Size = new Size(100,15);

rect.Offset(0, 0);

c.Location = rect.Location;

this.dataGridView1.Controls.Add(c);

Step 2: For individual row ,write event code. This is just to uncheck the checked row and check the unchecked row

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if( Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["chk_column"].Value)== true)

{
dataGridView1.Rows[e.RowIndex].Cells["chk_column"].Value =false;
}
else
{
dataGridView1.Rows[e.RowIndex].Cells["chk_column"].Value = true;
}
}