Power Builder - Ordenar columna de DATAWINOW

 
Vista:

Ordenar columna de DATAWINOW

Publicado por roberto (28 intervenciones) el 11/06/2003 16:02:16
Les hago llegar mi saludo.
Quiero ordenar un datawindow, de tal forma que al dar click sobre el título de la columna me ordene el DW en forma ascendente y al dar click por segunda vez en el mismo título de la columna me ordene en forma descendente. Si alguien puede ayudarme se lo agradezco de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ordenar columna de DATAWINOW

Publicado por JAGC (169 intervenciones) el 11/06/2003 16:21:54
// Variables de instancia
string orden, t_a, c_n

//Este código tenes que agregar en el evento Clicked de tu DW
integer i
string t_n, color_a
t_n = dwo.name

if right(t_n,2) = '_t' then

color_a = This.Describe(t_n+".Color")
c_n = mid(t_n,1,len(t_n)-2)
This.Modify(t_a+".Border='6'")
This.Modify(t_n+".Border='5'")
This.Modify(t_a+".Color="+color_a)
This.Modify(t_n+".Color=65535")

if t_n = t_a then
if mid(orden, len(RightTrim(orden)), 1) = 'A' then
orden = Lefttrim(c_n) + ' D'
else
orden = Lefttrim(c_n) + ' A'
end if
else
orden = Lefttrim(c_n) + ' A'
end if

t_a = dwo.name

This.SetSort(orden)
This.Sort()

end if

Probá, cualquier cosa avisá
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenar columna de DATAWINOW

Publicado por Milson Cardona (613 intervenciones) el 11/06/2003 16:28:42
Un saludo especial desde COLOMBIA

bueno, se me ocurre esta idea.

- como encabezado de la columna titulo colocas un BUTTOM en vez de un STATIC TEXT... el boton lo llamas cb_titulo.. esto es en DW object..

- en la ventana donde vas ha ver el DW que acabaste de crear defines una variable de instancia INTEGER ii_orden = 1, esta variable nos dirá en que sentido vamos a ordenar la columna si es 1 = ASC sino 2 = DES

- en el evento BUTTOMCLICKED del DW control donde peges el DW object que deseas ordenar colocas el siguiente código... este código supone que llamas al DW control DW_1..
STRING ls_nombre_ob
ls_nombre_ob = String(dwo.name)

IF LOWER(ls_nombre_ob) = "cb_titulo" THE
//si actualmente esta ordenado ASC, lo ordenamos DES
IF li_orden = 1 THEN
//ponemos el criterio de ordenamiento
dw_1.SetSort('titulo D')
//ejecutamos el ordenamiento que le pusimos
dw_1.Sort( )
//cambiamos la variable de orden
ii_orden = 2
ELSE
//ponemos el criterio de ordenamiento
dw_1.SetSort('titulo A')
//ejecutamos el ordenamiento que le pusimos
dw_1.Sort( )
//cambiamos la variable de orden
ii_orden = 1
END IF
END IF

espero que te sirva la idea... me cuentas como te fue con la solucion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenar columna de DATAWINOW

Publicado por Milson Cardona (613 intervenciones) el 11/06/2003 16:48:19
ACLARACIÓN: el anterior ejemplo es para una sola columna, me confundí un poco y creí que la columna que querias ordenar se llamaba título... pero puedes cambiar en la instrucción dw_1.SetSort('titulo D') por el verdadero nombre de la columna que deseas ordenar.

si necesitas ordenar varias columnas, solo basta que pegues tantos botones en el encabezado como columnas quieras ordenar en el DW object.... y en el evento BUTTOMCLICKED del DW control recuperas el nombre del boton al que le dieron click y haces el ordenamiento para todos los botones de igual forma para todos, solo cambiando el nombre de la columna a ordenar....
quedaría algo así

STRING ls_nombre_ob
ls_nombre_ob = String(dwo.name)

CHOOSE CASE LOWER(ls_nombre_ob)
CASE "cb_uno"
//si actualmente esta ordenado ASC, lo ordenamos DES
IF li_orden = 1 THEN
//ponemos el criterio de ordenamiento
dw_1.SetSort('columna_1 D')
ii_orden = 2
ELSE
//ponemos el criterio de ordenamiento
dw_1.SetSort('columna1 A')
//cambiamos la variable de orden
ii_orden = 1
END IF

CASE "cb_dos"
//si actualmente esta ordenado ASC, lo ordenamos DES
IF li_orden = 1 THEN
//ponemos el criterio de ordenamiento
dw_1.SetSort('columna_2 D')
...
CASE .....
....
END CHOOSE
//ejecutamos el ordenamiento que le pusimos en el CASE
dw_1.Sort( )

NOTA: para más presición puedes manejar una vble de instancia para cada columna que desees ordenar...

espero que se entienda la idea que quiero transmitir
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenar columna de DATAWINOW

Publicado por Ricardo (1957 intervenciones) el 11/06/2003 17:01:08
Otro, muy parecido al de JAGC.

String ls_old_sort, ls_column
Char lc_sort
/* Checa cuando el usuario hace click en la cabecera */
IF Right(dwo.Name,2) = '_t' THEN
ls_column = LEFT(dwo.Name, LEN(String(dwo.Name)) - 2)
/* Guarda la última ordenación, si hubiera alguna*/
ls_old_sort = dw_1.Describe("Datawindow.Table.sort")
/* Checa cuando préviamente se ordenó una columna y en la que se hace click actualmente es la misma o no. Si es la misma, entonces se checa el orden del ordenamiento anterior (A - Ascendente, D - Descendente) y lo cambia. Si las columnas odenadas no son las mismas, las ordena en orden ascendente. */
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
dw_1.SetSort(ls_column+" "+lc_sort)
ELSE
dw_1.SetSort(ls_column+" A")
END IF
dw_1.Sort()
END IF

NOTA: El nombre de la cabecera de la columna tiene que tener el mismo nombre que en la base de datos y acabado en '_t'

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias por la ayuda

Publicado por roberto (28 intervenciones) el 11/06/2003 17:15:30
Gracias a todos por la ayuda a solucionar mi problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cual fue la solución?

Publicado por Milson Cardona (613 intervenciones) el 12/06/2003 01:26:48
Un saludo especial desde COLOMBIA?

Hola Roberto,

porque no nos haces el favor a todos de compartir cual fue la solución a la que llegaste?
pues considero que es un problema un poco común y sería bueno tener en cuenta otras soluciones diferentes a la que uno le pueda dar al mismo problema para saber cual es la más óptima y tener herramientas de solución...

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenar columna de DATAWINOW

Publicado por Andy Espinoza (1 intervención) el 08/07/2018 05:24:18
muchas gracias por poner

NOTA: El nombre de la cabecera de la columna tiene que tener el mismo nombre que en la base de datos y acabado en '_t'

Ese era el pequeño detalle por el cual no me salia.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar