Clasificación de DataGridView con fechas
Resuelto
Anonyme209
Mensajes publicados
761
Estado
Miembro
-
Anonyme209 Mensajes publicados 761 Estado Miembro -
Anonyme209 Mensajes publicados 761 Estado Miembro -
Hola,
En la columna de mi DataGridView, tengo diversas fechas.
Quisiera que mi DataGridView ordene mis datos en función de las fechas en orden cronológico y viceversa.
Con DataGridView.Sort, las fechas se ordenan como texto normal, y eso da esto:
Gracias por tu ayuda.
En la columna de mi DataGridView, tengo diversas fechas.
Quisiera que mi DataGridView ordene mis datos en función de las fechas en orden cronológico y viceversa.
Con DataGridView.Sort, las fechas se ordenan como texto normal, y eso da esto:
01/01/2001 00:00
20/10/2015 00:00
30/05/2014 00:00
Gracias por tu ayuda.
2 respuestas
-
Hola,
Tienes que indicar el Tipo Fecha y no String en tu columna.
Mira esto:
https://www.developpez.net/forums/d897729/dotnet/langages/vb-net/trier-colonne-type-date-datagridview/
--
@+ El Pivert -
Puedes utilizar un comparador como en una listView.
Aquí está el código:
Private Sub DataGridView1_SortCompare(sender As Object, e As DataGridViewSortCompareEventArgs) Handles DataGridView1.SortCompare 'Recuperar el componente Dim grid As DataGridView = DirectCast(sender, DataGridView) 'Definir el nombre de las columnas (a cambiar según tus propios parámetros) Dim columnaFecha As String = "Fecha" 'a adaptar 'Tratamiento según la columna donde se sitúa la celda en curso de edición Select Case e.Column.Name Case columnaFecha e.SortResult = System.DateTime.Compare(CDate((e.CellValue1)), CDate((e.CellValue2))) e.Handled = True End Select End Sub 'se puede poner este código en un botón Private Sub DataGridView1_ColumnHeaderMouseDoubleClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseDoubleClick With DataGridView1 .Sort(.Columns("Fecha"), System.ComponentModel.ListSortDirection.Descending) End With End Sub 'se puede poner este código en un botón Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick With DataGridView1 DataGridView1.Sort(.Columns("Fecha"), System.ComponentModel.ListSortDirection.Ascending) End With End Sub
--
@+ El Pájaro Carpintero-
Hola,
El código funciona pero altera el funcionamiento de mi programa.
¿Habría algún componente (incluso no directamente integrado) que ordene automáticamente en orden cronológico?
Solo tendría que colocar mis líneas en este componente y luego devolverlas a mi datagridview en el orden correcto.- En el ejemplo que te mostré, solo hay una columna, hay que poner todas las columnas y ver si eso no altera tu programa:
'Definir el nombre de las columnas (a cambiar según tus propios parámetros) Dim columnaFecha As Date = "Fecha" 'a adaptar Dim columnaNombre As String= "Nombre" 'a adaptar 'etc. 'Tratamiento en función de la columna donde se ubique la celda en curso de edición Select Case e.Column.Name Case columnaFecha e.SortResult = System.DateTime.Compare(CDate((e.CellValue1)), CDate((e.CellValue2))) e.Handled = True Case columnaNombre e.SortResult = System.DateTime.Compare(String((e.CellValue1)), String((e.CellValue2))) e.Handled = True . End Select 'etc.
Corrige:
Dim columnaFecha As Date = "Fecha" 'a adaptar
en lugar de
Dim columnaFecha As String = "Fecha" 'a adaptar
Si no, la última opción, poner las fechas al estilo americano como para las fotos:
2015/02/15
-
-