2010-04-20 5 views

Répondre

21

Vous pouvez vous inscrire sur l'événement SortCompare, par exemple:

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

Je n'ai pas vérifié si cela fonctionne, mais vous voyez l'idée ...;)

0

Créer une classe comme:

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

et ne

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

@Mikael IComparer doit être System.Collections.IComparer, plus nous obtenons gridviewrows en x et y donc il ne peut pas être analysé en int ou une chaîne, donc cela ne fonctionne pas. – Thunder

+0

@Thunder, IComparer est Sysem.Collections.IComparer. Je n'ai pas inclus les instructions using, et vous avez raison à propos de l'entrée. Mais il pourrait être facilement modifié pour gérer les gridviewrows et retirer la valeur. J'aurais dû essayer cela dans une solution et non à main levée. –

5

Vous pouvez simplement convertir en Int 32 lorsque vous mettez une valeur à cette colonne

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

Et il triera correctement

+1

Je ne peux pas expliquer pourquoi cela n'a pas été voté. Fonctionne, merci. – C4u

+0

Cette solution fonctionne mieux! Plus facile et rapide. Une petite correction minuscule, faites juste "t" Capital: "Convert.ToInt32 (texte)" –

Questions connexes