Problema Ordenando Datawindows

Estoy iniciándome en power builder y me he topado con un problema.
Tengo una base de datos sqlserver 2005 con el problema de que la tabla clientes esta almacenado el código como texto (char(15)). He creado una datawindow para visionar el código, el nombre, y el cif, y quiero que al pinchar sobre cada columna se ordene por la misma. Este es el código que he puesto en el script del dwc.
//evento clicked
choose case dwo.name
 case "codigo"
  dwc_1.setsort("codigo a")
 case "nombre"
  dwc_1.setsort("nombre a")
 case "cif"
  dwc_1.setsort("cif a")
end choose
dwc_1.sort()
El problema es que el código me lo ordena al estilo 1, 10, 11, 2, 3. Y yo quiero ordenarlo numéricamente (1, 2, 3, 10 y 11).
¿Alguien puede ayudarme?

1 respuesta

Respuesta
1
Yo uso un código para ordenar la datawindow(dw) al pulsar la cabecera, el cual debe estar en el evento clicked de la dw y el cual es:
String ls_old_sort, ls_column
Char lc_sort
IF Right(dwo.Name,2) = '_t' THEN
ls_column = LEFT(dwo.Name, LEN(String(dwo.Name)) - 2)
ls_old_sort = THIS.Describe("Datawindow.Table.sort")
IF ls_column = LEFT(ls_old_sort, LEN(ls_old_sort) - 2) THEN
lc_sort = RIGHT(ls_old_sort, 1)
IF lc_sort = 'A' THEN
lc_sort = 'D'
ELSE
lc_sort = 'A'
END IF
THIS.SetSort(ls_column+" "+lc_sort)
ELSE
THIS.SetSort(ls_column+" A")
END IF
THIS.Sort()
END IF
Este código funciona cuando la cabecera de tu dw termina en "_t" el cual cuando creas un dw tipo grid se antepone automáticamente.
Espero que te funcione, de todas maneras pruébalo y por favor no te olvides de finalizar tu pregunta.
Hola experto, he probado tu código y funciona, pero no me soluciona el problema de ordenación. Me gusta porque sirve para cualquier dw, pero en este caso yo tengo una columna que no se ordena bien, porque son números almacenados como texto.
Buscando por ahí lo soluciné así, trasformando la columna en cuestión a LONG.
//evento clicked del dwc.
choose case dwo.name
 case "codigo_t"
  dwc_1.setsort("long(codigo) a")
 case "nombre_t"
  dwc_1.setsort("nombre a")
case "cif_t"
  dwc_1.setsort("cif a")
end choose
dwc_1.sort()
¿Hay forma de hacer eso en tu código?
Gracias y un saludo.
Ya lo probé y me funciona perfectamente así los números estén almacenados en texto... tu problema tal vez sea por la versión que usas porque yo uso PB 11.5 y me funciona de maravilla.
O en todo caso si es que tu problema persiste, cambia tu tipo de variable a integer y de tipo autonumérico y tu problema desaparecerá y eso te lo garantizo obviamente con el código anterior ue te lo dije.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas