Norberto
Here is some ListBox code I used before xBrowse and ADO ... and not tData .. I don't know if this code will help you ?? I have included the Skipper function as well.
Rick Lipkin
@ 0,0 LISTBOX oBrw FIELDS Â ;
   oRs:Fields("novellid"):Value,;
   substr( trim(oRs:Fields("lname"):Value)+", "+oRs:Fields("fname"):Value+SPACE(15),1,30),;
   oRs:Fields("progid"):Value,;
   oRs:Fields("read"):Value,;
   oRs:Fields("write"):Value,;
   oRs:Fields("super"):Value,;
   oRs:Fields("salaried"):Value,;
   oRs:Fields("empstat"):Value,;
   oRs:Fields("defloc"):Value,;
   oRs:Fields("defprg"):Value,;
   oRs:Fields("defact"):Value;
   SIZES 90,195,90,31,31,31,31,31,40,40,40;
   HEADERS "UserID", ;
       "Name",;
       "ProgID",;
       "Rd",;
       "Ed",;
       "Sup",;
       "Sal",;
       "St",;
       "Loc",;
       "Prog",;
       "Act";
   ON DBLCLICK( _EmpView( "V", oRs ) );
   UPDATE
   oBrw:bLogicLen := { || oRs:RecordCount }
   oBrw:bGoTop   := { || oRs:MoveFirst() }
   oBrw:bGoBottom := { || oRs:MoveLast() }
   oBrw:bSkip   := { | nSkip | Skipper( oRs, nSkip ) }  //  <----  skipper call
   oBrw:cAlias   := "ARRAY"
//-------------------------------
STATIC FUNCTION SKIPPER( oRsx, nSkip )
LOCAL nRec := oRsx:AbsolutePosition
oRsx:Move( nSkip )
IF oRsx:EOF; oRsx:MoveLast(); ENDIF
IF oRsx:BOF; oRsx:MoveFirst(); ENDIF
RETURN( oRsx:AbsolutePosition - nRec )