2010-04-20 11 views

Odpowiedz

21

Możesz zarejestrować się na wydarzenie SortCompare, na przykład:

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; 
... 

nie sprawdzić, czy to działa, ale masz pomysł ...;)

0

utworzyć klasę takich jak:

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 
    } 
} 

i zrobić

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

@Mikael IComparer powinny być System.Collections.IComparer, dodatkowo dostajemy gridviewrows w kierunku X i Y stąd nie może być analizowany na int lub ciąg znaków, więc nie robi praca. – Thunder

+0

@Thunder, IComparer to Sysem.Collections.IComparer. Nie uwzględniłem instrukcji użycia i masz rację co do danych wejściowych. Ale można go łatwo zmienić, aby obsługiwać widoki siatki i wyciągnąć wartość. Powinienem był tego spróbować w rozwiązaniu, a nie odręcznym. –

5

Możesz po prostu przekonwertować do Int 32, gdy wstawisz wartość do tej kolumny

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

I to będzie rodzaj poprawnie

+1

Nie rozumiem, dlaczego to nie zostało przegłosowane. Działa, dzięki. – C4u

+0

To rozwiązanie działa lepiej! Łatwiej i szybciej. Jedna drobna korekta, po prostu stwórz "t" Kapitał: "Convert.ToInt32 (text)" –

Powiązane problemy