2010-04-20 43 views
12

我有一個datagridview.It與數字字符串列不綁定,我想對它進行排序號明智的我用如何在的WinForms DataGridView的排序字符串數

colid.ValueType = typeof(int); 
grid.Sort(colid, ListSortDirection.Descending); 

但種種像串例如:

11 
12 
23 
7 
80 
81 

而預期是

7 
11 
12 
23 
80 
81 

回答

21

您可以在SortCompare註冊事件,例如:

private void customSortCompare(object sender, DataGridViewSortCompareEventArgs e) 
{ 
    int a = int.Parse(e.CellValue1.ToString()), b = int.Parse(e.CellValue2.ToString()); 

    // If the cell value is already an integer, just cast it instead of parsing 

    e.SortResult = a.CompareTo(b); 

    e.Handled = true; 
} 

... 
yourGridview.SortCompare += customSortCompare; 
... 

我沒有檢查其是否正常工作,但你的想法...;)

0

創建一個類,如:

class Sort : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     return -int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort descending 
     //return int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort ascending 
    } 
} 

,做

grid.Sort(new Sort()); 
+0

@Mikael的IComparer應System.Collections.IComparer,進一步我們得到的X和Y gridviewrows因此它不能被解析成int或字符串,所以它不工作。 – Thunder 2010-04-21 05:41:07

+0

@Thunder,IComparer是Sysem.Collections.IComparer。我沒有包含使用語句,並且你對輸入是正確的。但它可以很容易地改變,以處理gridviewrows並拉出價值。 我應該試過這個解決方案,而不是徒手畫。 – 2010-04-21 05:49:54

5

當您向該列添加值時,您可以將其轉換爲Int 32

DataGridView.Cells["example"].Value= Convert.toInt32(text); 

它將排序正確

+1

不能得到爲什麼這沒有upvoted。作品,謝謝。 – C4u 2016-09-19 14:16:18

+0

此解決方案效果更好!更簡單,快捷。一個小小的修正,只是讓「t」Capital: 「Convert.ToInt32(text)」 – 2017-09-29 10:30:31