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.