In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

dbBrowse con lAutoOrder := .T. no ordena alguna columna

Foro de Xailer profesional en español
Responder
CapelSoft
Mensajes: 130
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

dbBrowse con lAutoOrder := .T. no ordena alguna columna

Mensaje por CapelSoft »

Hola Ignacio,

He visto que el dbBrowse (sobre un dbfDataset) en algunos casos no ordena la columna sobre la que se hace clic (con lAutoOrder := .T.)

Os dejo un ejemplo donde se ve el problema. En ese ejemplo hay que hacer clic en botón (para abrir la dbf). La primera columna sí que hace la ordenación de la columna (al hacer clic en el 'header') pero en las otras columnas no...

¿Podría tener algo que ver el nombre de las columnas?

Espero haberme explicado...
Adjuntos
TestSort.zip
(2.66 KiB) Descargado 135 veces
--
José Luis Capel
http://www.CapelBlog.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: dbBrowse con lAutoOrder := .T. no ordena alguna columna

Mensaje por ignacio »

Buenos días,

Corregido!

De momento, no tienes más que cambiar el nombre a los campos DESC??? Y ASCEN??? Que supongo no será ningún problema ya que no parece que sean nombres reales.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
CapelSoft
Mensajes: 130
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Re: dbBrowse con lAutoOrder := .T. no ordena alguna columna

Mensaje por CapelSoft »

Hola Ignacio,

Gracias!

Por desgracia los nombres de los campos son DESC_1, DESC_2 ... y ASC_1, ASC_2...

Si me puedes pasar la corrección... o decirme cómo lo has corregido lo pongo en mi aplicación.

Como siempre... gracias!
--
José Luis Capel
http://www.CapelBlog.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: dbBrowse con lAutoOrder := .T. no ordena alguna columna

Mensaje por ignacio »

Código: Seleccionar todo

#xTranslate EndsWithNoCase( <cSearch>, <cTarget> ) => ( Upper( Right( <cTarget>, Len( <cSearch> ) ) ) == Upper( <cSearch> ) )

METHOD GetSeekExp( oDataField, cSeek ) CLASS XDbfDataset

   LOCAL cExp, cLen

   IF PCount() == 1
      WITH OBJECT oDataField
         DO CASE
         CASE :cType == "C" .or. :cType == "M"
            cExp := "Upper(" + :cName + ")"
         CASE :cType == "N"
            cExp := "StrZero(" + :cName + ", " + LTrim( Str( :nLen ) ) + ", " + LTrim( Str( :nDec ) ) + ")"
         CASE :cType == "D"
            cExp := "Dtos(" + :cName + ")"
         CASE :cType == "T"
            cExp := "HB_Ttos(" + :cName + ")"
         CASE :cType == "L"
            cExp := "iif(" + :cName + ",'1', '0')"
         END CASE
      END WITH
   ELSE
      cSeek := Upper( cSeek )
      cLen  := LTrim( Str( Len( cSeek ) ) )

      WITH OBJECT oDataField
         DO CASE
         CASE :cType == "C" .or. :cType == "M"
            cExp := cSeek
         CASE :cType == "N"
            cExp := StrPattern( cSeek, "0123465789.", .T. )
         CASE :cType == "D"
            cExp := "Left( Dtoc( " + :cName + " ), " +  cLen + " ) == '" + cSeek + "'"
         CASE :cType == "T"
            cExp := "Left( hb_ttoc( " + :cName + " ), " +  cLen + " ) == '" + cSeek + "'"
         CASE :cType == "L"
            cExp := IIF( cSeek $ "1YTSO", '1', '0' )
         END CASE
      END WITH
   ENDIF

RETURN cExp

//--------------------------------------------------------------------------

METHOD Sort( cExp, lGoFirst, lDes, cFor, oPgBar ) CLASS XDbfDataSet

   LOCAL cTag
   LOCAL lRet := .T.
   LOCAL lAds := "ADS" $ ( ::cAlias )->( RddName() )

   DEFAULT lGoFirst TO .T.
   DEFAULT lDes     TO .F.

   IF EndsWithNoCase( " ASC", cExp )
      cExp := StrTran( cExp, " ASC", "" )
   ENDIF

   IF EndsWithNoCase( " DESC", cExp )
      cExp := StrTran( cExp, " DESC", "" )
      lDes := .T.
   ENDIF

   If lAds .AND. lDes
      cExp := "Descend( " + cExp + ")"
   ENDIF

   cTag := "_" + Left( LTrim( Str( HB_CRC32( cExp ) ) ), 9 )

   IF Empty( ::cSortFile )
      ::cSortFile := ::oFileName:Unique( "TMP", Left( ::cAlias, 6 ) )
      IF Left( ::cSortFile, 1 ) == "\" .AND. Substr( ::cSortFile, 2, 1 ) != "\"
         ::cSortFile := Substr( ::cSortFile, 2 )
      ENDIF
   ENDIF

   IF ::OrdNumber( cTag, ::cSortFile ) > 0
      ::OrdSetFocus( cTag,,,, .T. )
   ELSE
      Application:lBusy := .T.
      TRY
         ::AddTag( cTag, cExp, cFor, ::cSortFile, oPgBar, .T.  )
      CATCH
         lRet := .F.
      END
      Application:lBusy := .F.
   ENDIF

   IF lRet
      IF ! lAds
         ( ::cAlias )->( OrdDescend( cTag,, lDes ) )
      ENDIF
      ::OrdSetFocus( cTag,,,, .T. )
      IF lGoFirst
         ::GoTop()
      ENDIF
   ENDIF

RETURN lRet

Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
CapelSoft
Mensajes: 130
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Re: dbBrowse con lAutoOrder := .T. no ordena alguna columna

Mensaje por CapelSoft »

Gracias! :-)
--
José Luis Capel
http://www.CapelBlog.es
Responder