Clasificación alfa de .Net Gridview, debe ordenarse numéricamente
Pregunta
Esta es mi primera pregunta real sobre la necesidad para cualquiera de los expertos de Gridview en el mundo .NET.
Estoy creando un Gridview a partir del código subyacente y tengo un montón de datos numéricos en las columnas.Aunque agrego la coma en los campos numéricos del código subyacente.Cuando lo cargo en Gridview, tengo activada la capacidad de clasificación, PERO la vista de cuadrícula elige ordenar ALFA en lugar de ordenar numéricamente porque agrego esas comas.
Entonces necesito ayuda.¿Alguien dispuesto a darle una oportunidad a este?Necesito cambiar algunas de mis columnas en la vista de cuadrícula a ordenación numérica en lugar de ordenación alfabética que está usando.
Solución 4
En cambio, simplemente recurrí al JQUERY Table Sorter.
se puede encontrar aquí: clasificador de mesa
Otros consejos
Si termina implementando su propio comparador y clasificándolos como cadenas, el algoritmo para tratar los números "correctamente" se llama Clasificación Natural.Jeff escribió una entrada bastante buena aquí:
Clasificación para humanos:Orden de clasificación natural
Puede encontrar una implementación bastante buena en C# aquí:
http://www.codeproject.com/KB/string/NaturalSortComparer.aspx
Dependiendo exactamente de cómo esté ordenando, puede usar uno de los métodos anteriores, o puede regresar a la base de datos y realizar la clasificación allí si las columnas son en realidad de tipo numérico y luego agregarle su decoración más adelante.
P-Invoke es tu amigo.
[DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
Entonces podrías usarlo como tu propio comparador.
Por ejemplo (en VS2005),
Array.Sort(tringArray, delegate(string left, string right)
{
return StrCmpLogicalW(left, right);
});
Me doy cuenta de que esto es muy antiguo, pero estás mezclando datos con presentación;Eso es lo que está arruinando a este tipo.Obtenga el número de SQL sin agregar comas y luego agréguelos en la capa de presentación.