Ordenar Dw

Hola, mira cree un objeto visual datawindows en el cual puse un código para ordenar A y DE precioando la cabecera de mi grid bueno esta bien ahí no hay problema, pero ademas cree 3 "sle_" para poder ordenar según lo que ingrese lo hice con un código simiilar:
If Ls_Primero <> '' Then
Ls_Where = Ls_Where + " Order By " + Ls_Primero + " "
End If
If Ls_Segundo <> '' Then
Ls_Where = Ls_Where + " , " + Ls_Segundo + " "
End If
If Ls_Tercero <> '' Then
Ls_Where = Ls_Where + " , " + Ls_Tercero + " "
End If
Li_Longitud = Len( Ls_Where )
Ls_Where = Left( Ls_Where, Li_Longitud - 1 )
Ls_Query = Ls_Sql + Ls_Where
MessageBox( Ls_Where,ls_query )
Dw_1.SetSQLSelect( ls_query )
Open( W_Espere )
Dw_1.Retrieve( )
Close( W_Espere )
El problema es el siguiente cuando lo ordeno de frente en los "sle_" ordena mi grid normal pero cuando lo ordeno primero mediante la cabecera del grid y luego deseo ordenarlo por los criterios que ingreso en los sle_ no lo ordena, e probado todo y no consigo entenderlo.
Espero que me puedas ayudar.
Atentamente.
MigueL

1 respuesta

Respuesta
1
Declara is_sql como variable de instancia y recupera el select en el evento constructor del dw
is_sql = GetSQLSelect()
ls_where = ''
Luego en el evento clicked del boton coloca:
if not isnull(ls_primero) or ls_primero<>'' then
ls_where = ls_where + " order by "+ls_primero
if not isnull(ls_segundo) or ls_segundo<>'' then
ls_where = ls_where + ","+ls_segundo
if not isnull(ls_tercero) or ls_tercero<>'' then
ls_where = ls_where + ","+ls_tercero
end if
end if
end if
ls_sql = is_sql + ls_where
dw_1.SetSQLSelect(ls_sql)
dw_1.Retrieve()
Este es el código de Uo_Ordenar:
string ls_col, ls_sort, is_sort
integer li_pos
SetPointer(HourGlass!)
/*******************************************************/
/* Pasa a una variable el nombre de la columna sobre el cual se clickea.*/
/*******************************************************/
ls_col = this.GetObjectAtPointer()
li_pos = Pos(ls_col, "~t")
/*******************************************************/
/* Checkea los dos ultimos caracteres que contiene la variable*/
/*******************************************************/
ls_col = Left(ls_col, li_pos - 1)
/*******************************************************/
/* La siguiente linea de código detiene todo si el click NO es en la cabecera de la columna */
/*******************************************************/
if NOT Lower(Right(ls_col, 2)) = "_t" then Return
/*******************************************************/
/* Asume que el nombre de la cabecera es el nombre de la columna + "_t".*/
/* Remueve los dos ultimos caracteres del nombre de la columna */
/*******************************************************/
ls_col = Left(ls_col, Len(ls_col) - 2)
ls_sort = ls_col + " A"
/*******************************************************/
/* Comprueba el ultimo ordenamiento hecho, si ha sido Ascendente (A), ejecutara un ordenamiento descendente (D), o sino todo lo contrario */
/*******************************************************/
if ls_sort = is_sort then
ls_sort = ls_col + " D"
else
ls_sort = ls_col + " A"
end if
is_sort = ls_sort
/*******************************************************/
/* Se ejecuta la ordenación */
/*******************************************************/
this.SetSort(is_sort)
this.Sort()
this.selectrow(0,false)
Hola, mira los 2 códigos que te di están bien este es el problema:
1.- Si ordeno primero por la cabecera del grid lo ordena.
2.- Si ordeno primero por los sle_ lo ordena - siempre y cuando lo ordene primero por este medio.
3.- Si ordeno primero por la cabecera del grid esta ok, pero si luego deseo ordenar por los sle_ no lo ordena.
Espero que me puedas ayudar.
Atentamente.
MigueL
Revisando tu código detalladamente veo que la variables is_sort lo estas declarando como local y no como instancia.
Debes declarar esa variable como instancia así cuando quieras ordenar por el sle_ sepa en que se ha quedado el ordenamiento (D o A).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas