don't forget to reset column size to what the user had prior to refresh....

SET VAR ttdvOrderBy TEXT
SET VAR ttdvOrderBy1 TEXT
GETPROPERTY SaleToDoStepsSummary CURRENTSORT 'ttdvOrderBy1'

IF ttdvOrderBy1 contains 'ASC' or ttdvOrderBy1 contains 'DESC' THEN
SET VAR ttdvOrderBy =('Order by '+.ttdvOrderBy1)
ENDIF

SET VAR x INTEGER = '0'
WHILE x<'7' THEN
SET VAR V TEXT =('set var xColWidth'+CTXT(.x)+' text')
&v
SET VAR V TEXT =('GETPROPERTY SaleToDoStepsSummary COLUMNS['+CTXT(.x)+']->WIDTH 
''xColWidth'+CTXT(.x)+'')
&v
SET VAR x INTEGER = (.x+1)
ENDWHILE

SET VAR ttdvTopItem TEXT = NULL
GETPROPERTY SaleToDoStepsSummary TOPITEM 'ttdvTopItem'
PROPERTY SaleToDoStepsSummary RefreshList 'TRUE'
PROPERTY SaleToDoStepsSummary TOPITEM .ttdvTopItem

SET VAR x INTEGER = '0'
WHILE x<'7' THEN
SET VAR V TEXT =('PROPERTY SaleToDoStepsSummary 
''COLUMNS['+CTXT(.x)+']->WIDTH'' .xColWidth'+CTXT(.x))
&v
SET VAR x INTEGER = (.x+1)
ENDWHILE
cls
RETURN



  ----- Original Message ----- 
  From: Lawrence Lustig 
  To: RBASE-L Mailing List 
  Sent: Monday, October 19, 2009 1:45 PM
  Subject: [RBASE-L] - Re: Listview and Sort


  Here's my stored procedure for refreshing list boxes.  You can install and 
use it as is, or use the idea to write your own code.  Watch for incorrectly 
wrapped lines in your email reader. -- Larry


  ------------------------------------------------------------------------------
  -- RefreshListbox: Refreshes the rows in a list box from the database;
  -- preserving sort order and position.  Returns new count of records.
  -- pRLB_CompID must receive the component ID of the list box to refresh.
  -- pRLB_Click can contain 'Y' if the calling program wants this procedure
  -- to simulate a click on the current index.
  -- If the list box where clause contains an ORDER BY phrase, ORDER BY
  -- must be fully spelled out, and must be the last clause in the WHERE.
  ------------------------------------------------------------------------------
  -- PUT RefreshListbox.PRC AS RefreshListbox pRLB_CompID TEXT(100) pRLB_Click 
TEXT(1) RETURN INTEGER
  ------------------------------------------------------------------------------


  IF pRLB_CompID IS NULL THEN
    RETURN -1
  ENDIF


  SET VAR pRLB_ItemIndex TEXT = NULL
  SET VAR pRLB_TopItem   TEXT = NULL
  SET VAR pRLB_Where     NOTE = NULL
  SET VAR pRLB_UserSort  TEXT = NULL
  SET VAR pRLB_Count     TEXT = NULL


  GETPROPERTY &pRLB_CompID ITEMINDEX         'pRLB_ItemIndex'
  GETPROPERTY &pRLB_CompID TOPITEM           'pRLB_TopItem'
  GETPROPERTY &pRLB_CompID LOOKUPWHERECLAUSE 'pRLB_Where'
  GETPROPERTY &pRLB_CompID CURRENTSORT       'pRLB_UserSort'


  -- If the user has applied a sort (by clicking the listview header), we need
  -- to change the lookup where clause to the new sort.  If there's no sort on
  -- the existing where clause, we add it.
  IF pRLB_UserSort IS NOT NULL AND (SLEN(TRIM(pRLB_UserSort)) > 0) THEN
    IF pRLB_Where CONTAINS 'ORDER BY' THEN
      SET VAR pRLB_Where = (SGET(.pRLB_Where, 1, (SLOC(.pRLB_Where, 'ORDER 
BY'))) & 'ORDER BY' & .pRLB_UserSort)
    ELSE
      SET VAR pRLB_Where = (.pRLB_Where & 'ORDER BY' & .pRLB_UserSort)
    ENDIF
    DEBUG WRITE 'Listbox', .pRLB_CompID, 'New where =', .pRLB_Where
    PROPERTY &pRLB_CompID LOOKUPWHERECLAUSE .pRLB_Where
  ENDIF


  -- Perform refresh
  PROPERTY &pRLB_CompID REFRESHLIST 'TRUE'


  PROPERTY &pRLB_CompID TOPITEM .pRLB_TopItem


  IF pRLB_Click = 'Y' THEN
    PROPERTY &pRLB_CompID MAKECLICK .pRLB_ItemIndex
  ENDIF


  GETPROPERTY &pRLB_CompID ITEMCOUNT 'pRLB_Count'


  CLEAR VAR pRLB_% EXCEPT pRLB_Count


  RETURN (INT(.pRLB_Count))

Reply via email to