¿Como lo hacemos?
Vamos a utilizar el evento _ColumnClick, que produce cuando hacemos click en el titulo de la columna. También crearemos una variable ordenlistado, que indicara como se ordenara (creciente de la A a la Z, o decreciente de la Z a la A). Esta variable es global, y la crearemos en el modulo var.
En el módulo Ordenar, crearemos dos procedimientos según el orden creciente (ord_AZ) o decreciente (ord_ZA), y le pasamos a los dos el grid que queremos ordenar (en nuestro caso el Fmain.Gridviewdatos) y la columna (Column), que le da valor al producirse el evento _ColumnClick.
En el módulo Var:
PUBLIC ordenlistado AS Integer
En el módulo Fmain:
PUBLIC SUB GridViewDatos_ColumnClick(Column AS Integer)
IF var.ordenlistado = 0 THEN
Ordenar.ord_AZ(GridViewDatos, Column)
var.ordenlistado = 1
ELSE
var. ordenlistado = 0
Ordenar.ord_ZA(GridViewDatos, Column)
ENDIF
END
' Gambas module file
PUBLIC SUB ord_AZ(grid AS GridView, a AS Integer)
'a: indica la columna a la que ordenamos
'grid: es la rejilla que ordenamos
DIM limite AS Integer
DIM cambio1 AS String
DIM i AS Integer
DIM j AS Integer
DIM col AS Integer
grid.visible = FALSE
limite = grid.Rows.COUNT
IF (grid.Columns.COUNT < a + 1) OR a < 0 THEN
Message.Error("Error en la columna introducida para ordenar")
GOTO salidaordenar
ENDIF
FOR i = 0 TO limite - 1
FOR j = 0 TO limite - 2
IF UCase$(Grid[j, a].Text) > UCase$(Grid[j + 1, a].Text) THEN
FOR col = 0 TO grid.Columns.COUNT - 1
cambio1 = Grid[j, col].Text
Grid[j, col].text = Grid[j + 1, col].Text
Grid[j + 1, col].text = cambio1
NEXT
ENDIF
NEXT
NEXT
salidaordenar:
grid.visible = TRUE
END
'------------------------------------------------------------------------
PUBLIC SUB ord_ZA(grid AS GridView, a AS Integer)
'a: indica la columna a la que ordenamos
'grid: es la rejilla que ordenamos
DIM limite AS Integer
DIM cambio1 AS String
DIM i AS Integer
DIM j AS Integer
DIM col AS Integer
grid.visible = FALSE
limite = grid.Rows.COUNT
IF (grid.Columns.COUNT < a + 1) OR a < 0 THEN
Message.Error("Error en la columna introducida para ordenar")
GOTO salidaordenar
ENDIF
FOR i = 0 TO limite - 2
FOR j = i TO limite - 1
IF UCase$(Grid[i, a].Text) <= UCase$(Grid[j, a].Text) THEN
FOR col = 0 TO grid.Columns.COUNT - 1
cambio1 = Grid[j, col].Text
Grid[j, col].text = Grid[i, col].Text
Grid[i, col].text = cambio1
NEXT
ENDIF
NEXT
NEXT
salidaordenar:
grid.visible = TRUE
END
Varias cosas a comentar:
1. El método de ordenacion elegido es el llamado “Burbuja”.
En internet podeis encontrar la explicación de este algoritmo de ordenación
(yo lo saque de alli )
2. No diferencio entre mayúsculas o minúsculas, usando UCase$, convierto las cadenas a mayúsculas y las comparos. Si hago click en la columna de las imagenes, se ordenan por la ruta donde esten ubicadas.
No hay comentarios:
Publicar un comentario