Clasificación de DataGridView con fechas

Resuelto
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:

01/01/2001 00:00
20/10/2015 00:00
30/05/2014 00:00


Gracias por tu ayuda.

2 respuestas

cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
 
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
0
Anonyme209 Mensajes publicados 761 Estado Miembro 19
 
Hola,
He intentado:
DataGridView1.Columns(0).ValueType = GetType(Date)


pero no funciona mejor.
0
cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
 
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
0
Anonyme209 Mensajes publicados 761 Estado Miembro 19
 
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.
0
cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730 > Anonyme209 Mensajes publicados 761 Estado Miembro
 
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
0
Anonyme209 Mensajes publicados 761 Estado Miembro 19
 
He logrado encontrar y resolver el problema de compatibilidad con tu primer código, y ahora funciona perfectamente.
Muchas gracias por tu ayuda.
0