I want to add checkbox in header and also if I checked in header checkbox it should be like select all and deselect All... just like above image!
I want to create this type of listview header with checkbox in c#
I want to add checkbox in header and also if I checked in header checkbox it should be like select all and deselect All... just like above image!
I want to create this type of listview header with checkbox in c#
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.
For drawing the ListView
you need to handle DrawColumnHeader
, DrawItem
and DrawSubItem
events.
Draw checkbox in DrawColumnHeader
event.
e.DrawDefault = true;
for other drawing events to draw default rendering.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.Code:
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();
}
}
Screenshot:
CheckBoxes
property of ListView
to true.