Page 1 of 1
Indexed Array
Posted: Mon Apr 29, 2019 7:19 am
by omni
Roger,
Do you have any samples for using dcbrowse, sort with arrays instead of file indexes?
I have used files for this but never arrays and users want to be able to select the sort for records that are in different files.
Fred
Omni
Re: Indexed Array
Posted: Mon Apr 29, 2019 3:16 pm
by Auge_Ohr
omni wrote:Do you have any samples for using dcbrowse, sort with arrays instead of file indexes?
i do not know if there is a Express++ Sample but you can look at \Source\samples\basics\GuiBrow\FBROWSE.prg.
it does use Directory() as Arrays and you can sort it (ALT-1 - ALT-4)
Re: Indexed Array
Posted: Tue Apr 30, 2019 7:20 am
by omni
I don't have that. Must be in a different release.
Fred
Re: Indexed Array
Posted: Tue Apr 30, 2019 11:06 am
by Wolfgang Ciriack
Make a Sortblock, f.e.
Code: Select all
local bSortCol:={|a,n,o| aShow:=SortArrayCol(n,aShow), dc_getbrowarray(oBrowse, aShow), oBrowse:refreshAll(), dc_getrefresh(Getlist)}
a Browser:
Code: Select all
@3.5,1 DCBROWSE oBrowse DATA aShow ;
CURSORMODE XBPBRW_CURSOR_ROW ;
NOHORIZSCROLL ;
FIT ;
SIZE 50,h ;
ITEMMARKED {|| ....} ;
ITEMSELECTED {|| ...} ;
....
DCBROWSECOL ELEMENT 1 HEADER "No." WIDTH 4 PARENT oBrowse SORT bSortCol LEFTBUTTON
DCBROWSECOL ELEMENT 2 HEADER "Name" WIDTH 20 PARENT oBrowse SORT bSortCol LEFTBUTTON
.....
and the sort function of the array to your needs:
Code: Select all
static function SortArrayCol(nCol,aShow)
local aR
if nCol=1
aR:=ASort(aShow,,,{|x,y| x[1] < y[1]})
elseif nCol=2
aR:=ASort(aShow,,,{|x,y| upper(x[2]) < upper(y[2])})
elseif nCol=3
......
endif
return aR
So you can sort your browse by clicking in the browse header.
Re: Indexed Array
Posted: Tue Apr 30, 2019 4:22 pm
by sdenjupol148
Fred,
Here's another way.
*-----------------
#include "dcdialog.ch"
proc main
LOCAL GetList[0]
LOCAL aNames, oBrowse
aNames := {{"Steve" , "Rogers", "001"},;
{"Bruce" , "Banner", "002"},;
{"Walt" , "Disney", "003"},;
{"Peter" , "Parker", "004"},;
{"Natashia", "Romanoff", "005"},;
{"Tony" , "Stark", "006"}}
@ 0,0 DCBROWSE oBrowse SIZE 55,8 DATA aNames SCROLLBARHEIGHT 10 FONT '12.Arial'
DCBROWSECOL HEADER "First Name";
ELEMENT 1 PARENT oBrowse WIDTH 10;
SORT {|| ASort(aNames,,,{|a,b| a[1]<b[1]})}
DCBROWSECOL HEADER "Last Name";
ELEMENT 2 PARENT oBrowse WIDTH 10;
SORT {|| ASort(aNames,,,{|a,b| a[2]<b[2]})}
DCBROWSECOL HEADER "ID";
ELEMENT 3 PARENT oBrowse WIDTH 3;
SORT {|| ASort(aNames,,,{|a,b| a[3]<b[3]})}
DCREAD GUI TITLE "Browse Sort" ADDBUTTONS FIT
return
* -------------
procedure appsys; return
Bobby
Re: Indexed Array
Posted: Thu May 16, 2019 8:17 am
by omni
Thanks, that was very helpful. Got it to work fine.
Fred