2010-04-20 41 views
12

tengo columna de serie con los números en un datagridview.It no está obligado, me gustaría resolverlo número sabia que utilizacómo ordenar cadena como número en DataGridView en winforms

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

pero es géneros como cuerdas por ejemplo:

11 
12 
23 
7 
80 
81 

mientras que la espera es

7 
11 
12 
23 
80 
81 

Respuesta

21

puede registrarse en el evento SortCompare, por ejemplo:

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

Yo no comprobar si funciona, pero se entiende la idea ...;)

0

Crear una clase como:

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

y hacer

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

@Mikael IComparer debe ser System.Collections.IComparer, más nos alejamos gridviewrows en x e y por lo tanto no se pueden analizar en int o una cadena, por lo que no funciona. – Thunder

+0

@Thunder, IComparer es Sysem.Collections.IComparer. No incluí las declaraciones de uso, y tienes razón sobre la entrada. Pero podría cambiarse fácilmente para manejar gridviewrows y extraer el valor. Debería haber intentado esto en una solución y no a mano alzada. –

5

Puede simplemente convertir a Int 32 cuando pone un valor a esa columna

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

Y va a ordenar correctamente

+1

No entiendo por qué esto no fue votado. Funciona, gracias. – C4u

+0

¡Esta solución funciona mejor! Más fácil y rápido. Una pequeña corrección pequeña, solo haga "t" Capital: "Convert.ToInt32 (texto)" –

Cuestiones relacionadas