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!