Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Problema Con Ordenamiento De GridView
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Problema Con Ordenamiento De GridView 
 
Bueno tengo un problema al ordenar un GridView, este radica en que al 10 y al 1 me los toma como iguales a razon de ordenar. EJ:

Inicial                                  Final
1                                         9
3                                         5
2                                         3
10                                       2
9                                         10
5                                         1

Este es el algoritmo de ordenamiento

  DIM limite AS Integer
  DIM cambio1 AS String
  DIM i AS Integer, j AS Integer, col AS Integer
  
  TIni.Rows.Count -= 1
  TIni.Visible = FALSE '<---- Ignoren Esto

  limite = TIni.Rows.Count - 1 '<---- Ignoren Esto

  FOR i = 0 TO limite - 2
    FOR j = 0 TO limite - 1
      IF UCase$(TIni[j, 0].Text) < UCase$(TIni[j + 1, 0].Text) THEN
        Message.Info("Cambio")
        FOR col = 0 TO TIni.Columns.Count - 1
          cambio1 = TIni[j, col].Text
          TIni[j, col].Text = TIni[j + 1, col].Text
          TIni[j + 1, col].Text = cambio1
        NEXT
      END IF
    NEXT
  NEXT

TIni.visible = TRUE '<---- Ignoren Esto


Saludo
 



 
demonshack - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Ordenamiento De GridView 
 
Echale un vistazo a mi programa listin.

manual-paso-a-paso-de-como-hacer-un-programa-gambas2-listin

Y al pequeño manual en la parte dedicada a:
Módulo Ordenar. Ordenar un gridviews con _ColumnClick.............................................................58 pag del manual.
 
No creo que sea problema del algoritmo que utilizas (no lo he revisado, la verdad.. .), pero me suena a que tu problemema pueda ser  esto:

IF UCase$(TIni[j, 0].Text) < UCase$(TIni[j + 1, 0].Text) THEN



Si comparas textos "1" esta antes que "10" y luego vendria a ordenar "2", lo suyo es que pongas: "01", "02,"03"..."10", asi lo ordenara correctamente...

Posible solucion para que el usuario no tenga encuento que tiene que ser esto:
      -le pones un mensaje diciendo que añada los ceros (chapuzilla) "0" antes de lo numeros (por ejemplo 1 al 10, pues todos tendria que poner 01,02,03,04,05,06,07,08,09

      -Haces que el programa añada los ceros a las izquierda, por ejemplo:

PUBLIC SUB Form_Open()

       PRINT Right("00" & "1", 3)
         PRINT Right("00" & "10", 3)

IF Right("00" & "1", 3) > Right("00" & "10", 3) THEN
     PRINT Right("00" & "1", 3) & " es mayor que " & Right("00" & "10", 3)
     ELSE
     PRINT Right("00" & "10", 3) & " es mayor que " & Right("00" & "1", 3)
     ENDIF

END

            
La salida del terminal es la siguiente:
Citar:
001
010
010 es mayor que 001


 

Sin embargo cuando ordenas numeros, no tienes ese problema..porque 1 es siempre menor que 10, otra solucion seria utilizar la funcion Val(texto) que realmente esta compara numeros....


IF val(TIni[j, 0].Text) < val(TIni[j + 1, 0].Text) THEN


Esto si te  funcionara.... ya que comparas numero y no texto.

Saludos

Nota: Este problema tambien se da en programas comerciales que lo que hacen es comparar texto y no numeros...
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Martes, 31 Agosto 2010, 13:00; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Con Ordenamiento De GridView 
 
Otro tema a comentarte:  ordenación de fechas

En España estamos acostumbrado  a ponerla de la siguiente manera dia/mes/año, por ejemplo 31/08/2010, este sistema no vale a la hora de ordenar registros (si lo tienes como texto), lo que yo hago es representarla en el formato americano año/mes/dia 2010/08/31, asi no tienes ningun problema a la hora de la ordenacion.

Para ello utiliza orden, visita pagina de la documentación de gambas para ver mas detalles de esta orden.

por ejemplo:
PRINT Format$(Now, "yyyy-mm-dd hh-nn-ss")

Genera la salida: año/mes/dia hora/minutos/segundos
2006-04-29 07-41-11

Espero que te valgan las explicaciones, saludos.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Problema Con GridView soldadozero Controles/Librerías/Componentes 25 Jueves, 27 Junio 2013, 16:45 Ver último mensaje
soldadozero
No hay nuevos mensajes Ordenamiento De Burbuja Usando Repeat Y Co... v3ctor Aplicaciones/Fragmentos de Código 0 Jueves, 04 Septiembre 2014, 18:45 Ver último mensaje
v3ctor
No hay nuevos mensajes Problema Con El Evento Data De GridView. D... Shell General 15 Sabado, 22 Noviembre 2014, 00:21 Ver último mensaje
Shell
No hay nuevos mensajes GridView Vs TableView calcena Controles/Librerías/Componentes 2 Viernes, 29 Julio 2016, 16:16 Ver último mensaje
calcena
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron