Foros del Web » Programación para mayores de 30 ;) » .NET »

Datagridview ya ordenado por fecha

Estas en el tema de Datagridview ya ordenado por fecha en el foro de .NET en Foros del Web. Hola Buenas. Tengo un datagridview que relleno con los datos que recupero en un dataset. La consulta sql está ordenada por un campo fecha y ...
  #1 (permalink)  
Antiguo 14/12/2008, 13:48
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Datagridview ya ordenado por fecha

Hola Buenas.

Tengo un datagridview que relleno con los datos que recupero en un dataset. La consulta sql está ordenada por un campo fecha y el datagrid, cuando lo relleno, también.

Cuando el usuario hace click en la cabecera de la columna de la fecha el datagridview solo me ordena teniendo en cuenta el día de la fecha, es decir que si tuviera dos filas con fechas 10/11/2008 y 11/10/2007 y el usuario hace click en la cabecera de la columna para reordenar los datos, pondría en primer lugar la fila que tiene fecha 10/11/2008 y en segundo lugar 11/10/2007, cuando en realidad debería ser al reveés.

No se si solamente está teniendo en cuenta el día de la fecha o está tomando la fecha como texto al reordenar.

¿Alguien sabe como se puede ordenar correctamente por la fecha al hacer click en la cabecera de la columna?

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 15/12/2008, 01:28
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Datagridview ya ordenado por fecha

probablemetne lo que te este pasando es que al insertar los datos en el datagrid está entendiendo que esa fecha es un string.
Lo que tienes que hacer es, una vez introducidos los datos, formatear las columnas de fechas que tengas para que sean de tipo fecha (dándoles además el formato que quieras)
Lo debes de hacer de esta manera

DataGridView1.Columns("nombre de la columna fecha").DefaultCellStyle.Format = "dd/MM/yy"


Te formatea la fecha al tipo 14/04/08
  #3 (permalink)  
Antiguo 15/12/2008, 06:05
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Datagridview ya ordenado por fecha

El caso es que he puesto el formato fecha en la columna tal y como has indicado y sigue haciendo el mismo tipo de ordenación. Ordena unicamente teniendo en cuenta el día de la fecha.
  #4 (permalink)  
Antiguo 15/12/2008, 09:08
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Datagridview ya ordenado por fecha

DataGridView1.Columns("nombre de la columna fecha").DefaultCellStyle.Format = "d"

prueba con eso a ver.
  #5 (permalink)  
Antiguo 15/12/2008, 12:31
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Datagridview ya ordenado por fecha

Con lo último que me indicas tampoco funciona. Además no me interesa únicamente mostrar el día. Quiero tener la fecha con formato "dd/MM/yyyy" y que al ordenar tenga en cuenta la fecha completa, no solo el día.
Gracias de nuevo.
  #6 (permalink)  
Antiguo 15/12/2008, 14:48
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Datagridview ya ordenado por fecha

joder, a ver qué narices le pasa.
Mándame si quieres el script que usas para hacer todo lo que mencionas. No puede ser tan difícil.
Algo nos tenemos que estar saltando.

saludos
  #7 (permalink)  
Antiguo 16/12/2008, 11:58
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Datagridview ya ordenado por fecha

Al final para hacerlo todo mucho más sencillo me he creado un proyecto nuevo y he agregado un datagridview. Le he agregado una columna en tiempo de diseño y también he colocado un botón en el formulario. En el evento Click del botón he puesto

DataGridView1.Rows.Add("01/11/2008")
DataGridView1.Rows.Add("02/10/2008")
DataGridView1.Columns(0).DefaultCellStyle.Format=" dd/MM/yyyy"

Cuando ordeno sigue pasando igual. Primero pone el 01/11/2008 y luego el 02/10/2008. Sigue teniendo en cuenta únicamente el día para ordenar

si cambio el formato de la columna a DataGridView1.Columns(0).DefaultCellStyle.Format=" d" hace lo mismo
  #8 (permalink)  
Antiguo 17/12/2008, 01:19
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Datagridview ya ordenado por fecha

Coñe!!!!!!!!!!!!!!!!

A ver si lo va a estar haciendo así porque cuando presionas el botón te está ordenando primero de mayor a menor!!!!!
Prueba a darle una vez al botón, y luego otra, a ver qué ordenación sigue. (pòrque el boton lo que hace es ordenartelo de mayor a menor o de menor a mayor segun presionas)
Y prueba a meterle otras fechas (aunque sólo sea de prueba) para ver que efectivamente lo hace bien.


COmo sea esto..... es pa matarnos.. Y ame cuentas. Ciao
  #9 (permalink)  
Antiguo 17/12/2008, 01:56
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Datagridview ya ordenado por fecha

JEJE que va. Ya probé eso antes de mandar el último post. Cuando pulso el botón claro que los pone desordenados porque yo lo he hecho así. Pero cuando pulso dos veces en la cabecera de la columna lo sigue manteniendo igual cuando debería poner primero el 02/10/2008. En fin seguiremos buscando.
  #10 (permalink)  
Antiguo 17/12/2008, 02:44
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Datagridview ya ordenado por fecha

si quieres mandame el codigo y lo miro, porque ya no se me ocurre nada mas.
La última cosa que se me ocurre:
(si no funciona es porque debes de estar haciendo algo de por medio qeu cambia el campo a string)
Como has creado la columna por diseño, vete al datagrid, al asistente de dreacion de columnas. Selecciona la columna en cuestión y vete a sus propiedades.
Vete a la propiedad DEFAULTCELLSTYLE, y le das al botoncito qeu te aparece. Se te abrirá otra ventanita, y en FORMAT eliges el formato de fecha que quieras.

Recuerda qeu has de borrar luego todo lo referente al formato d eesta columna en el codigo


SY como te digo, si no funciona, mandame el codigo y lo miro. POrqeu como te digo yo lo hago así siempre, y me va bien.

Ale, suerte, y a ver si sacamos esta tontería de una vez.
CIao
  #11 (permalink)  
Antiguo 17/12/2008, 12:33
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Datagridview ya ordenado por fecha

En el proyecto este que me creé de cero solamente con el datagridview y el botón para añadir las fechas lo hacía todo en tiempo de diseño, la creación de la columna, el estilo de la celda con el formato de fecha, etc. Solamente le insertaba en tiempo de ejecución dos fechas.

Te adjunto el código real del problema.

La configuración del la grid grdHis la hago todo por código, es este (aunque aquí no aplico el formato a la celda de la fecha si lo he hecho anteriormente pero al no funcionar la ordenación quité todo lo referente al formato de la celda de la fecha:
Código PHP:
 Me.grdHis.Columns.Add("CODHIS""Código")
        
Me.grdHis.Columns.Add("FECHIS""Fecha")
        
Me.grdHis.Columns.Add("DESHIS""Descripción")

        
Me.grdHis.Columns(0).Visible False
        Me
.grdHis.Columns(1).AutoSizeMode DataGridViewAutoSizeColumnMode.DisplayedCells 

Con esta consulta devulevo los datos en un DataTable
Código PHP:
"SELECT * FROM HIS WHERE CODHIS = " Me.txtCOD.Text " ORDER BY FECHIS;" 
Cargo los datos en una matriz que pertenece a un tipo de datos creado por mi. La variable Fila es un DataRow.
El procedimiento prcLinGridHis se encaga de asignar los datos a las columnas del datagridview.
Código PHP:
ReDim HIS(Tabla.Rows.Count)
        If 
Tabla.Rows.Count 0 Then
            i 
0
            
For Each Fila In Tabla.Rows
                With HIS
(i)
                    .
CODHIS Fila.Item("CODHIS")
                    .
CPAHIS Fila.Item("CPAHIS")
                    .
FECHIS Fila.Item("FECHIS")
                    .
DESHIS Fila.Item("DESHIS")
                    
Me.grdHis.Rows.Add()
                    
prcLinGridHis(ii)
                    
1
                End With
            Next 
Esta es la defición del tipo de dato
Código PHP:
Dim HIS as HisClin
--------------------------------
    Public 
Structure HisClin
        
Public Grabar As Boolean
        
Public CODHIS As Integer
        
Public CPAHIS As Integer
        
Public FECHIS As Date
        
Public DESHIS As String
    End Structure 
El procedimiento prcLinGridHis recibe como parámetros el índice de la matriz HIS que queremos leer y la fila de la grid donde se añadirán los datos
Código PHP:
 Private Sub prcLinGridHis(ByVal Indice As IntegerByVal Fila As Integer)

        
With HIS(Indice)
            
Me.grdHis.Item("CODHIS"Fila).Value = .CODHIS
            Me
.grdHis.Item("FECHIS"Fila).Value Format(.FECHIS"dd/MM/yyyy")
            
Me.grdHis.Item("DESHIS"Fila).Value = .DESHIS.Replace(Chr(13) & Chr(10), " ")
            If .
DESHIS <> "" Then
                Me
.grdHis.Item("DESHIS"Fila).ToolTipText = .DESHIS
            
Else
                
Me.grdHis.Item("DESHIS"Fila).ToolTipText ""
            
End If
        
End With
    End Sub 

A ver si lo conseguimos.

Gracias de nuevo. Un saludo
  #12 (permalink)  
Antiguo 17/12/2008, 13:26
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Datagridview ya ordenado por fecha

Pregunta:
¿haces todo esto para introducir los datos de tu select en el datagrid?????
Es decir, los datos los de la select los cargas en un dataTable, y leugo los datos d eeste lo smetes en el data grid. ¿es asi???
  #13 (permalink)  
Antiguo 18/12/2008, 01:56
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Datagridview ya ordenado por fecha

Sí, así es. Lo hago así porque el mantenimiento de la tabla lo hago sobre la matríz. Así no tengo que acceder a la base de datos hasta el momento de guardar los cambios. En este momento se recorre la matríz y se guardan los datos que son necesarios. Si se quiere borrar, modificar o añadir un registro a la grid directamente se hace todo sobre la matriz. Así se evita tanto acceso a base de datos. Si quieres lo de la matriz sáltatelo. Simplemente de la select intenta cargar el datagridview a ver si sale la ordenación.

Un saludo.
  #14 (permalink)  
Antiguo 18/12/2008, 03:23
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Datagridview ya ordenado por fecha

bueno kirkem, yo te commento como suelo hacer todo esto de cargar el datagrid a partir de una select:
De esta forma, como la select me trae la fecha, él ya entiende que es fecha y la ordenación debería de funcionar.
Te pongo, a ver si te vale, y a ver si con esto funciona, ok?? Si no, me dices, y vemos qeu hacer, qeu esto tiene que salir!!!

Se hace todo por código. Sólo has d eponer un datagridview y un BindingNavigator. Y listo.
Una vez qeu has rellenado el datatable con el resultado de la SELECT:

Dim BSource As New BindingSource

BSource.DataSource = dataTable.rows 'asociamos las tablas de ds al bninding source
'Si usas dataSet: BSource.DataSource = DS_registros.Tables(0)
BindingNavigator1.BindingSource = BSource 'asociamos el navigator al binding source
DataGridView1.DataSource = BSource 'asociamos el datagrid al bsource

haciendo esto, has asociado los datos de tu dataTable o dataSet al Datagrid y al navegador del datagrid.

Despues, si quieres formatear cmapos, visible, etc etc etc, lo haces normal

DataGridView1.Columns("IMAGEN_PEDIDO").Visible = False



A ver qué tal esto.
Saludos
  #15 (permalink)  
Antiguo 18/12/2008, 16:40
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Datagridview ya ordenado por fecha

Por fiiiiin!!! ya lo he conseguido. Cuando agregaba el dato a la columna de la fecha del datagrid hacia un Format(Fecha,"dd/MM/yyyy") y eso era lo que convería el dato a string y no lo mantenía como date. Lo pude comprobar haciendo VarType(Format(Fecha,"dd/MM/yyyy")) y ahí me mostraba String en vez de Date. Simplemente lo que hice fue quitar este Format y aplicar el formato directamente a la celda con DataGridView1.Columns(0).DefaultCellStyle.Format=" d"

Muchas gracias por haberte tomado tantas molestias. Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:32.