[英]How to sort string as numbers in DataGridView
我在datagridview中有帶有特定數字的字符串列。 沒有限制。 我想正確排序。 默認的DataGridView排序不正確。
示例:Dgv對其進行如下排序:
- FS 752/08/2014
- FS 752/06/2015
- FS 751/12/2013
- FS 751/08/2014
- FS 751/06/2015
它應該像這樣:
- FS 752/06/2015
- FS 751/06/2015
- FS 752/08/2014
- FS 751/08/2014
- FS 751/12/2013
我該如何實現?
如前所述,您沒有使用DataSource
則可以嘗試使用SortCompare
事件 。
當用戶單擊列以更改排序順序時,或者以編程方式調用Sort
函數時,將調用此事件。
這是一個基本的例子。 我假設您要對年份(?),月份(?),第一個數字進行排序:
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
// Check if we are sorting by the special column.
if (myDataGridView.Columns.Contains("My_Column") && e.Column == myDataGridView.Columns["My_Column"])
{
// Parse the special values (add validation if required).
string[] parts1 = e.CellValue1.ToString().Trim().Split('/');
int a1 = int.Parse(parts1[0].Split(' ')[2]);
int b1 = int.Parse(parts1[1]);
int c1 = int.Parse(parts1[2]);
string[] parts2 = e.CellValue2.ToString().Trim().Split('/');
int a2 = int.Parse(parts2[0].Split(' ')[2]);
int b2 = int.Parse(parts2[1]);
int c2 = int.Parse(parts2[2]);
// Compare each value as required.
// First compare the last value (year?)
e.SortResult = c1.CompareTo(c2);
// If equal, then compare second value (month?)
if(e.SortResult == 0)
e.SortResult = b1.CompareTo(b2);
// Finally if still equal, then compare first value
if(e.SortResult == 0)
e.SortResult = a1.CompareTo(a2);
}
}
注意 :如果不能確保每個單元格中始終都有有效的格式,則需要向此事件添加驗證邏輯。 例如,使用int.TryParse()
並檢查null
值,並驗證string
拆分的長度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.