How to extract array from array browser

This forum is for eXpress++ general support.
Message
Author
Janko
Posts: 111
Joined: Sat Mar 20, 2010 8:36 am
Location: Cerklje

Re: How to extract array from array browser

#11 Post by Janko »

Roger,

thank you for your sample. In fact it does what I wanted, except in case that filter kills so many rows, that what is left, makes less then full screen.

I ammended your code:

Code: Select all

FUNCTION Test()
***********************************************************************************
LOCAL GetList[0], aDir, i, oBrowse,  lFlt:=.f.

DC_ChDir('C:\windows\system32')

aDir := Directory()

@ 0,0 DCBROWSE oBrowse DATA aDir SIZE 100,30 ;
      FILTER {|a| if(lflt,a[2]<1000, .t.)}

FOR i := 1 TO 10
  DCBROWSECOL ELEMENT i HEADER Alltrim(Str(i)) WIDTH 10 PARENT oBrowse
NEXT


@ 31,0 DCPUSHBUTTON CAPTION 'Filter on/of ' SIZE 10 ;
   ACTION {||lflt:=!lflt, dc_getRefresh(obrowse)}


@ 31,20 DCPUSHBUTTON CAPTION 'Export' SIZE 10 ;
   ACTION {||ExportData(oBrowse)}

DCREAD GUI FIT TITLE 'Array Export Test'

RETURN nil


If lFlt=.t., it filters out majority of rows, only 20 is left (less then full screen). Function ExportData returns empty array.

Can you take a look.

Thank you very much.

JAnko

User avatar
rdonnay
Site Admin
Posts: 4745
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: How to extract array from array browser

#12 Post by rdonnay »

Here is a fix:

Code: Select all

#INCLUDE "dcdialog.CH"

FUNCTION Main()

LOCAL GetList[0], aDir, i, oBrowse,  lFlt:=.f.

DC_ChDir('C:\windows\system32')

aDir := Directory()

@ 0,0 DCBROWSE oBrowse DATA aDir SIZE 100,30 ;
      FILTER {|a| if(lflt,a[2]<1000, .t.)}

FOR i := 1 TO 10
  DCBROWSECOL ELEMENT i HEADER Alltrim(Str(i)) WIDTH 10 PARENT oBrowse
NEXT


@ 31,0 DCPUSHBUTTON CAPTION 'Filter on/of ' SIZE 10 ;
   ACTION {||lflt:=!lflt, oBrowse:goTop(), oBrowse:forceStable(),oBrowse:refreshAll()}


@ 31,20 DCPUSHBUTTON CAPTION 'Export' SIZE 10 ;
   ACTION {||ExportData(oBrowse)}

DCREAD GUI FIT TITLE 'Array Export Test'

RETURN nil

* -----------

STATIC FUNCTION ExportData(oBrowse)

LOCAL aData := {}, i, lDone := .f.

oBrowse:lockUpdate(.t.)

oBrowse:goTop()
oBrowse:forceStable()
oBrowse:refreshAll()

oBrowse:hitBottomBlock := {||lDone := .t.}

DO WHILE !lDone

  AAdd(aData,Array(oBrowse:colCount))
  FOR i:= 1 TO oBrowse:colCount
    ATail(aData)[i] := Eval(oBrowse:getColumn(i):dataLink)
  NEXT

  oBrowse:down()
  oBrowse:forceStable()

ENDDO

oBrowse:goTop()
oBrowse:forceStable()
oBrowse:lockUpdate(.f.)

wtf aData

RETURN nil
The eXpress train is coming - and it has more cars.

Janko
Posts: 111
Joined: Sat Mar 20, 2010 8:36 am
Location: Cerklje

Re: How to extract array from array browser

#13 Post by Janko »

Roger,

I am sorry, but still not working as desired. When screen is not full, aData is empty. I've changed filter to 3000, the screen was full and it works as expected.

Best regards
JAnko

User avatar
rdonnay
Site Admin
Posts: 4745
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: How to extract array from array browser

#14 Post by rdonnay »

I don't know what to tell you. It works fine for me.
The eXpress train is coming - and it has more cars.

Janko
Posts: 111
Joined: Sat Mar 20, 2010 8:36 am
Location: Cerklje

Re: How to extract array from array browser

#15 Post by Janko »

Roger,

after changing the code to:

Code: Select all

***************************************************************************************
FUNCTION ExportData(oBrowse)
***************************************************************************************
LOCAL aData := {}, i, lDone := .f.

oBrowse:lockUpdate(.t.)
oBrowse:hitBottomBlock := {||lDone := .t.}
oBrowse:goTop()
oBrowse:forceStable()
lDone:=.f.                   // after adding this line, it works

DO WHILE .t.

  AAdd(aData,Array(oBrowse:colCount))
  FOR i:= 1 TO oBrowse:colCount
    ATail(aData)[i] := Eval(oBrowse:getColumn(i):dataLink)
  NEXT

	  if lDone                          // to fetch last record too
		  exit
	  endif
  oBrowse:down()
  oBrowse:forceStable()

ENDDO

oBrowse:goTop()
oBrowse:forceStable()
oBrowse:lockUpdate(.f.)

dc_arrayview(aData)
RETURN aData
it works also for smaller browses.

Thank you very much for excelent ideas in your sample.

Best regards
JAnko

User avatar
rdonnay
Site Admin
Posts: 4745
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: How to extract array from array browser

#16 Post by rdonnay »

I knew you would figure out a solution. Congratulations.
The eXpress train is coming - and it has more cars.

Post Reply