List<T>
不支持直接排序。
相反,您可以使用Linq例程進行排序。
然而,你將需要包括排序字段檢查,這將是隻要你列數..
不知道你customobject
類,讓我們嘗試用Name
類:
class Name
{
public string first { get; set; }
public string last { get; set; }
public string middle { get; set; }
public Name (string f, string m, string l)
{
first = f; middle = m; last = l;
}
}
現在,讓我們編寫了ColumnHeaderMouseClick
事件:
private void dataGridView1_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
List<Name> names = dataGridView1.DataSource as List<Name>;
string col = dataGridView2.Columns[e.ColumnIndex].DataPropertyName;
string order = " ASC";
if (dataGridView1.Tag != null)
order = dataGridView1.Tag.ToString().Contains(" ASC") ? " DESC" : " ASC";
dataGridView1.Tag = col + order;
if (order.Contains(" ASC"))
names = names.OrderBy(x => col == "first"? x.first
: col == "last" ? x.last : x.middle).ToList();
else
names = names.OrderByDescending(x => col == "first"? x.first :
col == "last" ? x.last : x.middle).ToList();
dataGridView1.DataSource = names;
}
注意,我目前的排序列和順序存儲在DGV的Tag
。你可以將它移動到一個類的變量或其他地方。不幸的是DGV的SortOrder
屬性無法設置。
來源
2016-10-14 15:35:14
TaW
點擊排序按鈕 - >排序的列表 - >說就是數據源 - >重新綁定網格 – mybirthname
您已經解決你的問題? – TaW