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...
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.
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
-
- Mensajes: 130
- Registrado: Vie Jul 29, 2005 8:49 am
- Ubicación: Valencia - España
- Contactar:
dbBrowse con lAutoOrder := .T. no ordena alguna columna
- Adjuntos
-
- TestSort.zip
- (2.66 KiB) Descargado 136 veces
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: dbBrowse con lAutoOrder := .T. no ordena alguna columna
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
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
-
- 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
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!
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!
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: dbBrowse con lAutoOrder := .T. no ordena alguna columna
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