Usuario
Ordenar Columna de Datagridview

Pregunta
-
Pregunta hay alguna forma deOrdenar Columna de Datagridview que no sea alfabéticamente
A que me refiero tengo campo enero,febrero,marzo,abril,mayo etc. Si presiono para que me los ordene, me los ordena alfabéticamente y me queda desordenado según el orden de los meses del año. Lo que quiero hacer que al presionar un botón o al ingresar al formulario se me ordenen pero como corresponde, en orden de los meses del año y no alfabéticamente
Si alguien me puede ayudar pliss
Saludos
- Cambiado Enrique M. Montejo martes, 4 de septiembre de 2012 17:05 Controles de Windows Forms (De:Lenguaje VB.NET)
Todas las respuestas
-
-
-
Hola Amigo:
La mejor manera seria que colocaras una columna oculta con el numero del mes que representa cada Mes descrito en letra y despues ordenar esta de esta manera:
DataGridView1.Sort(DataGridView1.Columns("Nombre_de_la_columna"),System.ComponentModel.ListSortDirection.Ascending)
De esta manera ordenas la columna con el numero del mes. y solucionas tu problema...
Desconosco si existe una forma directa de hacerlo y si la hay creo que aprendere contigo :D
Saludos desde Monterrey, N.L. México
Luis Escobar :D
- Editado JoséLuisGarcía miércoles, 8 de agosto de 2012 23:32
-
El método Sort del DataGridView1 es invocado cuando se pica sobre la columna 0 (En el método Compare, la celda se identifica como 0, la puedes cambiar obviamente). El orden implementado aquí es sólo ascendente. Se asume una ortografía standard (e.g., septiembre con p).
'Class1.vb Imports System.Collections Public Class ComparaMeses Implements IComparer Dim meses As String() = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"} Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _ Implements IComparer.Compare Dim res As Integer = 0 Dim rx As DataGridViewRow = CType(x, DataGridViewRow) Dim ry As DataGridViewRow = CType(y, DataGridViewRow) If meses.Contains(rx.Cells(0).Value.ToString.ToLower) And meses.Contains(ry.Cells(0).Value.ToString.ToLower) Then res = Array.IndexOf(meses, rx.Cells(0).Value.ToString.ToLower) - Array.IndexOf(meses, ry.Cells(0).Value.ToString.ToLower) End If ' Return res End Function End Class 'Form1.vb Public Class Form1 Private Sub DataGridView1_ColumnHeaderMouseClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick DataGridView1.Sort(New ComparaMeses) End Sub End Class
-
Walteres tu solucion es la mas acertada a mi necesidad ,pero tira error en
If mes.Contains(rx.Cells(0).Value.ToString.ToLower) And mes.Contains(ry.Cells(0).Value.ToString.ToLower) Then
res = Array.IndexOf(mes, rx.Cells(0).Value.ToString.ToLower) - Array.IndexOf(mes, ry.Cells(0).Value.ToString.ToLower)
End If
Error 'Contains' no es un miembro de 'System.Array'.
A y muchas gracias a todos por ayudar
- Editado noesmalo jueves, 9 de agosto de 2012 13:45 Data