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
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:
--
@+ El Pájaro Carpintero
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
En el ejemplo que te mostré, solo hay una columna, hay que poner todas las columnas y ver si eso no altera tu programa:
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
'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
He intentado:
pero no funciona mejor.