Torna al Thread
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
string nomeProprieta = dataGridView1.Columns[e.ColumnIndex].DataPropertyName;
//--- uso il tag della colonna per memorizzarmi la direzione
if(dataGridView1.Columns[e.ColumnIndex].Tag == null)
dataGridView1.Columns[e.ColumnIndex].Tag = ListSortDirection.Ascending;
ListSortDirection direzione = (ListSortDirection)dataGridView1.Columns[e.ColumnIndex].Tag;
if (direzione == ListSortDirection.Ascending)
direzione = ListSortDirection.Descending;
else
direzione = ListSortDirection.Ascending;
//--- ordino la sorgente dati e la rimetto come sorgente
List<Articolo> lista = dataGridView1.DataSource as List<Articolo>;
lista.Sort(
delegate(Articolo art1, Articolo art2)
{
//--- recupero i valori di proprietà dei 2 oggetti
IComparable val1 = art1.GetType().GetProperty(nomeProprieta).GetValue(art1, null) as IComparable;
IComparable val2 = art2.GetType().GetProperty(nomeProprieta).GetValue(art2, null) as IComparable;
if (val1 == null || val2 == null)
return 0;
if (direzione == ListSortDirection.Ascending)
return val1.CompareTo(val2);
else
return val2.CompareTo(val1);
});
dataGridView1.Refresh();
dataGridView1.Columns[e.ColumnIndex].Tag = direzione;
}