C#: Add Select All, Deselect All Checkbox In Column Header In DataGridView Control
Posted by tech on
November 17, 2008
Adding controls to your DataGridView like a checkbox as a column is possible with the use of the 
DataGridViewCheckboxColumn class. This post assumes that you are using the DataGridView control in a Windows.Form application and that your gridview object can already populate data into it. The purpose of this post is to add a column containing checkboxes including a header checkbox, used to select and deselect all in one click.
![]()
The name of our DataGridView control is list. To add a checkbox column into the gridview control, use the following code below inside your className_Load() method.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // customize dataviewgrid, add checkbox column DataGridViewCheckBoxColumn checkboxColumn = new DataGridViewCheckBoxColumn(); checkboxColumn.Width = 30; checkboxColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; list.Columns.Insert(0, checkboxColumn); // add checkbox header Rectangle rect = list.GetCellDisplayRectangle(0, -1, true); // set checkbox header to center of header cell. +1 pixel to position correctly. rect.X = rect.Location.X + (rect.Width / 4); CheckBox checkboxHeader = new CheckBox(); checkboxHeader.Name = "checkboxHeader"; checkboxHeader.Size = new Size(18, 18); checkboxHeader.Location = rect.Location; checkboxHeader.CheckedChanged += new EventHandler(checkboxHeader_CheckedChanged); list.Controls.Add(checkboxHeader); |
The method that does the selecting and deselecting of all checkboxes within the checkbox column is made possible with the CheckedChanged event. We add an event handler for this to make it work.
1 2 3 4 5 6 | private void checkboxHeader_CheckedChanged(object sender, EventArgs e) { for (int i = 0; i < list.RowCount; i++) { list[0, i].Value = ((CheckBox) list.Controls.Find("checkboxHeader", true)[0]).Checked; } list.EndEdit(); } |
That’s all there is to it. If you may wonder how to make the checkbox header align to the center, the code that makes that happen is the part where there is a Rectangle object used.
1 2 3 4 | // add checkbox header Rectangle rect = list.GetCellDisplayRectangle(0, -1, true); // set checkbox header to center of header cell. +1 pixel to position correctly. rect.X = rect.Location.X + (rect.Width4); |
I divided the cell area’s width by 4 instead of 2 because I had to take into account the checkbox header’s width value. By the way, you also need to set the DataGridView control’s AutoSizeColumnsMode property to Fill so that all any empty spaces within the DataGridView control will be occupied











February 19th, 2011 at 9:27 pm
Hi. I think theres a problem in adding the checkbox header inside the gridview. My datagridview has a vertical scroll bar and when I scroll farther to the right, the checkbox header doesn’t stick to its position, It always follows whenever I used the scroll bar. How can I resolve this?
February 20th, 2011 at 8:33 am
@yesow: hi dude, sorry i don’t do c# nowadays.
June 22nd, 2011 at 4:33 am
Thank you. It useful to me.
August 21st, 2011 at 11:33 am
This code very usefull.. How to add “Delete” code based on this code?
So, if I checked on the selected row, then the data will be deleted from tha datagridview also from database…
Thanks in advance…
November 8th, 2011 at 10:17 pm
Just add the following line:
list.Columns["checkboxHeader"].Frozen = true;
before
list.Controls.Add(checkboxHeader);
It should stop the check box in the header to move when the user scroll horizontally