public partial class FormPerson : Form{
List<Person> people = new List<Person>{
new Person { Id = 1, Name = "Alice", Age = 30 , Gender = false},
new Person { Id = 2, Name = "Bob", Age = 25 , Gender = true},
new Person { Id = 3, Name = "John", Age = 35 , Gender = false},
new Person { Id = 4, Name = "Charlie", Age = 35 , Gender = false}
};
public FormPerson(){
InitializeComponent();
}
private void FormPerson_Load(object sender, EventArgs e){
gvPerson.DataSource = people;
gvPerson.ColumnHeaderMouseClick += GvPerson_ColumnHeaderMouseClick;
}
private void GvPerson_ColumnHeaderMouseClick(object? sender, DataGridViewCellMouseEventArgs e){
if(e.ColumnIndex < 3){
DataGridViewColumn column = gvPerson.Columns[e.ColumnIndex];
SortOrder sortOrder = column.HeaderCell.SortGlyphDirection;
sortOrder = sortOrder == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;
switch (e.ColumnIndex){
case 0:
people = (sortOrder == SortOrder.Ascending) ? people.OrderBy(p => p.Id).ToList() : people.OrderByDescending(p => p.Id).ToList();
break;
case 1:
people = (sortOrder == SortOrder.Ascending) ? people.OrderBy(p => p.Name).ToList() : people.OrderByDescending(p => p.Name).ToList();
break;
case 2:
people = (sortOrder == SortOrder.Ascending) ? people.OrderBy(p => p.Age).ToList() : people.OrderByDescending(p => p.Age).ToList();
break;
}
gvPerson.DataSource = null;
gvPerson.DataSource = people;
gvPerson.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = sortOrder;
}
}
}