更新:我誤解你的問題,我覺得你需要一個 '穩定' 的排序。爲此,您需要以某種方式使用LINQ。
但是你總是希望Name列按升序排列;這可以通過編碼SortCompare
事件中完成的,也許是這樣的:
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
if (e.CellValue1 == e.CellValue2)
{
int order = dataGridView1.SortOrder == SortOrder.Ascending ? 1 : -1;
string altCol = "Name";
if (e.Column.Name == "Name") altCol = "Status";
string s1 = dataGridView1[altCol, e.RowIndex1].Value.ToString();
string s2 = dataGridView1[altCol, e.RowIndex2].Value.ToString();
e.SortResult = String.Compare(s1, s2) * order;
e.Handled = true;
}
}
我測試一下,看看對主排序列平等。只有這樣我們才需要介入並切換到altenate排序列。我使用硬編碼的兩列名稱。
我使用變量order
來糾正在降序排序時發生的不需要的反轉。
對於這類工作,你需要設置每列的SortMode
地方:
foreach (DataGridViewColumn col in dataGridView1.Columns)
col.SortMode = DataGridViewColumnSortMode.Automatic;
來源
2014-11-25 15:48:18
TaW
以及你嘗試過在'DataGridView.Sort方法簡單的谷歌搜索()'[DataGridView.Sort(HTTP:/ /msdn.microsoft.com/en-us/library/0868ft3z%28v=vs.110%29.aspx) – MethodMan 2014-11-25 13:53:08
我做到了。結果主要涉及綁定數據源和/或按多列進行排序。在這裏發佈一個問題,因爲我認爲我的情況有點不同。謝謝。 – eranfu 2014-11-25 14:04:16
不幸的是,.NET中的大多數類似於不穩定。然而,LINQ中的所有類型都是afaik,穩定的。因此,您可以將數據推入列表中,使用訂單並將其抽回。或者使用DataBinding ..或者你可以寫一個自定義的排序,但我相信LINQ的方式會更容易編碼.. – TaW 2014-11-25 14:18:32