Defining xBrowse COLUMNS for array of hashes
Defining xBrowse COLUMNS for array of hashes
Lets say an array is made up of a few records of hashes with the following structure
h_["receipt"] := "100"
h_["date"] := ctod("05/12/2018")
h_["amount"] := 1000
How to specify the COLUMNS part in xBrowse command if we just want to display h_["receipt"] and h_["amount"]?
TIA
h_["receipt"] := "100"
h_["date"] := ctod("05/12/2018")
h_["amount"] := 1000
How to specify the COLUMNS part in xBrowse command if we just want to display h_["receipt"] and h_["amount"]?
TIA
FWH 11.08/FWH 19.12
BCC5.82/BCC7.3
xHarbour/Harbour
BCC5.82/BCC7.3
xHarbour/Harbour
- nageswaragunupudi
- Posts: 10729
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 10 times
- Contact:
Re: Defining xBrowse COLUMNS for array of hashes
Code: Select all | Expand
DATASOURCE h_ ;
COLUMNS "receipt","amount"
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Defining xBrowse COLUMNS for array of hashes
Thanks for the quick reply Rao
Just to confirm, h_ is stored inside an array.
aFiledbf := {}
aadd(aFiledbf, h_)
Would coding it as below sufficient?
Thanks!
Just to confirm, h_ is stored inside an array.
aFiledbf := {}
aadd(aFiledbf, h_)
Would coding it as below sufficient?
Code: Select all | Expand
DATASOURCE aFiledbf
COLUMNS "receipt", "amount"
Thanks!
FWH 11.08/FWH 19.12
BCC5.82/BCC7.3
xHarbour/Harbour
BCC5.82/BCC7.3
xHarbour/Harbour
- nageswaragunupudi
- Posts: 10729
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 10 times
- Contact:
Re: Defining xBrowse COLUMNS for array of hashes
hua wrote:Thanks for the quick reply Rao
Just to confirm, h_ is stored inside an array.
aFiledbf := {}
aadd(aFiledbf, h_)
Would coding it as below sufficient?Code: Select all | Expand
DATASOURCE aFiledbf
COLUMNS "receipt", "amount"
Thanks!
Yes.
But you seem to be using a very old version of FWH.
What I said works with any recent version. I am not sure about very old versions.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Defining xBrowse COLUMNS for array of hashes
Rao, for some reason the autosort doesn't seem to work.
Anything wrong with my definition?
Anything wrong with my definition?
Code: Select all | Expand
redefine xbrowse oBrw id 111 of oDlg ;
COLUMNS "select", "receipt", "date", "name", "amount" ;
HEADERS 'Select', 'Receipt#', 'Date', 'Customer', 'Amount' ;
PICTURES nil, nil, nil, nil, '999,999,999.99' ;
DATASOURCE aFiledbf CELL LINES NOBORDER FASTEDIT AUTOSORT
- nageswaragunupudi
- Posts: 10729
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 10 times
- Contact:
Re: Defining xBrowse COLUMNS for array of hashes
Autosort and incremental seek are not provided for array of hashes.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- nageswaragunupudi
- Posts: 10729
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 10 times
- Contact:
Re: Defining xBrowse COLUMNS for array of hashes
What are your requirements?
Autosort only?
Autosort only?
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- nageswaragunupudi
- Posts: 10729
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 10 times
- Contact:
Re: Defining xBrowse COLUMNS for array of hashes
Please implement Autosort and Incremental seek with this code
Add these functions to your program
Code: Select all | Expand
REDEFINE XBROWSE oBrw id 111 of oDlg ;
COLUMNS "select", "receipt", "date", "name", "amount" ;
HEADERS 'Select', 'Receipt#', 'Date', 'Customer', 'Amount' ;
PICTURES nil, nil, nil, nil, '999,999,999.99' ;
DATASOURCE aFiledbf CELL LINES NOBORDER FASTEDIT AUTOSORT
WITH OBJECT oBrw
:Cargos := { "select", "receipt", "date", "name", "amount" }
:cSortOrders := { |oCol| HashArraySort( oCol ) }
:bSeek := { |c| HashArraySeek( oBrw, c ) }
// YOUR OTHER CODE HERE
END
Add these functions to your program
Code: Select all | Expand
function HashArraySort( oCol )
local hSave := oCol:oBrw:aRow
local cKey := oCol:Cargo
local cOrder := If( oCol:cOrder == "A", "D", "A" )
if cOrder == "A"
if ValType( hSave[ cKey ] ) == "C"
ASort( oCol:oBrw:aArrayData, , , { |x,y| Upper( x[ cKey ] ) < Upper( y[ cKey ] ) } )
else
ASort( oCol:oBrw:aArrayData, , , { |x,y| x[ cKey ] < y[ cKey ] } )
endi
else
if ValType( hSave[ cKey ] ) == "C"
ASort( oCol:oBrw:aArrayData, , , { |x,y| Upper( x[ cKey ] ) > Upper( y[ cKey ] ) } )
else
ASort( oCol:oBrw:aArrayData, , , { |x,y| x[ cKey ] > y[ cKey ] } )
endi
endif
oCol:oBrw:nArrayAt := AScan( oCol:oBrw:aArrayData, { |h| h == hSave } )
return cOrder
function HashArraySeek( oBrw, cSeek )
local lFound := .f.
local nAt, oCol, cKey
nAt := AScan( oBrw:aCols, { |o| !Empty( o:cOrder ) } )
if nAt == 0
return .f.
endif
oCol := oBrw:aCols[ nAt ]
cKey := oCol:Cargo
cSeek := Upper( cSeek )
nAt := AScan( oBrw:aArrayData, { |h| Upper( cValToChar( h[ cKey ] ) ) = cSeek } )
if nAt == 0
return .f.
endif
oBrw:nArrayAt := nAt
return .t.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India