Introduction
Adding checkbox in listview column header, initially Listview doesn't contain checkbox in a column header. We need to create it by using OwnerDraw and some sub items.
Background
You can set OwnerDraw property of ListView to true and draw a ChceckBox on first column header and handle ColumnClick to perform select/deselect all.
Using the Code
- For drawing the
ListView, you need to handle DrawColumnHeader, DrawItem and DrawSubItem events. - Draw
checkbox in DrawColumnHeader event. - Set
e.DrawDefault = true; for other drawing events to draw default rendering. - Handle
ColumnClick event and store the checked state of column header in tag of column. Also, for each item of list view, set Checked property to perform select/deselect all.

The code snippet is as given below:
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
if (e.ColumnIndex == 0)
{
e.DrawBackground();
bool value = false;
try
{
value = Convert.ToBoolean(e.Header.Tag);
}
catch (Exception)
{
}
CheckBoxRenderer.DrawCheckBox(e.Graphics, new Point(e.Bounds.Left + 4, e.Bounds.Top + 4),
value ? System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal :
System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal);
}
else
{
e.DrawDefault = true;
}
}
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
e.DrawDefault = true;
}
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (e.Column == 0)
{
bool value = false;
try
{
value = Convert.ToBoolean(this.listView1.Columns[e.Column].Tag);
}
catch (Exception)
{
}
this.listView1.Columns[e.Column].Tag = !value;
foreach (ListViewItem item in this.listView1.Items)
item.Checked = !value;
this.listView1.Invalidate();
In the above image, I have 3 columns:
- I set empty text for first column.
- I set
CheckBoxes property of ListView to true. - I set empty text for items and added 2 sub items for each item.
Special thanks to Reza Aghaei for his help!