FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour XBROWSE - How to change the oRowSet (SOLVED)
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
XBROWSE - How to change the oRowSet (SOLVED)
Posted: Mon Feb 11, 2019 10:53 AM

Hi Huys,

I need to change completely the content of a xBrowse at run time. The oRowSet, the ttitles and the formats of the columns. Is it possible ?

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1487
Joined: Tue Jun 14, 2016 07:51 AM
Re: XBROWSE - How to change the oRowSet
Posted: Mon Feb 11, 2019 11:32 AM
For the headers :

Code (fw): Select all Collapse
   Public aVelden1:=  { ;
   { "klant_nr"           , "Code" , NIL,  65 }, ; // 1
   { "naam_1"             , "Naam" , NIL, 240 }, ; //
   { "gemeente"           , "Gemeente" , NIL, 110 }, ; // 1
   { "dat_lst"            , "DatLST" , NIL, 70 }, ; // 1
   { "Jaar_1"             , "J1" , NIL, 75 }, ; // 1
   { "Jaar_2"             , "J1" , NIL, 75 }, ; // 1
   { "Jaar_3"             , "J1" , NIL, 75 }, ; // 1
   { "Jaar_4"             , "J1" , NIL, 75 }, ; // 1
   { "Jaar_5"             , "J1" , NIL, 75 }, ; // 1
   { "totomzet"             , "omzet" , NIL, 70 }}   // 1

   @ 55,0 XBROWSE oBrw[1] size -1,-1 PIXEL OF  oFld:aDialogs[ 1 ] font oFonts ;
      DATASOURCE "klant" ;
      COLUMNS aVelden1;
      AUTOSORT CELL LINES NOBORDER FOOTERS

     oBrw[1]:cHeaders := { 'Code','Naam','Gemeente','Dat_LST',str(year(date()),4),str(year(date())-1,4),str(year(date())-2,4),str(year(date())-3,4),str(year(date())-4,4),'Totaal' }
     oBrw[1]:SetChecks()
     oBrw[1]:bRClicked := { || XbrShowSizes( oBrw[1] )  }
     //oBrw[1]:nStretchCol  := STRETCHCOL_WIDEST
     oBrw[1]:CreateFromCode()
Marc Venken

Using: FWH 23.08 with Harbour
Posts: 1487
Joined: Tue Jun 14, 2016 07:51 AM
Re: XBROWSE - How to change the oRowSet
Posted: Mon Feb 11, 2019 11:36 AM
To call them by name if nessesary

Code (fw): Select all Collapse
WITH OBJECT :oCol( "J_" + Str( Year( Date() ), 4 ) )


If you put "J_" in front.
Marc Venken

Using: FWH 23.08 with Harbour
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: XBROWSE - How to change the oRowSet
Posted: Mon Feb 11, 2019 12:29 PM

Thank you Mark,

But I also must to change the datasource/oRowSet. In your sample, I just saw the changes of headers.

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: XBROWSE - How to change the oRowSet
Posted: Mon Feb 11, 2019 06:03 PM
Prueba

Code (fw): Select all Collapse
oBrw : SetODbf( oRowSet )


Saludos
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: XBROWSE - How to change the oRowSet
Posted: Tue Feb 12, 2019 02:24 AM
Switching Rowsets dynamically at runtime:

Use:
Code (fw): Select all Collapse
oRsNew:ResetXBr( oBrw ) // oBrw is the running xbrowse
oRsNew:SetXbrColumns( oBrw, [aCols] ) // If aCols is ommitted, all columns
oBrw:Refresh()


Try this sample.
Code (fw): Select all Collapse
#include "fivewin.ch"

function Main()

   local oCn, oStates, oCust
   local aStateCols, aCustCols
   local oDlg, oBrw

   oCn      := FW_DemoDB()
   oStates  := oCn:RowSet( "states" )
   oCust    := oCn:RowSet( "customer" )

   aStateCols  := { "Code", "Name" }
   aCustCols   := { { "First", "CustName" }, ;
                    { "Age", "CustAge" }, ;
                    { "Salary", "Due", "99,999,999.99" } }

   DEFINE DIALOG oDlg SIZE 400,500 PIXEL TRUEPIXEL

   @ 70,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE oStates COLUMNS aStateCols ;
      CELL LINES NOBORDER FASTEDIT FOOTERS

   oBrw:CreateFromCode()

   @ 10, 20 BTNBMP PROMPT "Customer" SIZE 100,40 PIXEL OF oDlg FLAT ACTION ;
      (  oCust:ResetXbr( oBrw ), oCust:SetXbrColumns( oBrw, aCustCols ), ;
         oBrw:lFooter := .t., ;
         oBrw:Due:nFooterType := AGGR_SUM, ;
         oBrw:MakeTotals(), ;
         oBrw:Refresh() )

   @ 10,120 BTNBMP PROMPT "States" SIZE 100,40 PIXEL OF oDlg FLAT ACTION ;
      (  oStates:ResetXbr( oBrw ), oStates:SetXbrColumns( oBrw, aStateCols ), ;
         oBrw:lFooter := .f., ;
         oBrw:Refresh() )

   @ 10,220 BTNBMP PROMPT "EDIT" SIZE 100,40 PIXEL OF oDlg FLAT ACTION oBrw:EditSource()

   ACTIVATE DIALOG oDlg CENTERED

   oStates:Close()
   oCust:Close()
   oCn:Close()

return nil

You need recent version of FWH.
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: XBROWSE - How to change the oRowSet
Posted: Tue Feb 12, 2019 03:02 AM
In the previous post we demonstrated how to switch different rowsets (including different configuration of columns) dynamically at runtime.

It is also possible to switch the same rowset to a totally different query (different table too). It is possible even to switch to a different connection too.

Code (fw): Select all Collapse
oRs:oCn := oNewCon  // optional
oRs:ReQuery( "select * from different_table" )
oRs:SetXbrColumns( oBrw, [aCols] )
oBrw:Refresh()


This is a working sample:
Code (fw): Select all Collapse
#include "fivewin.ch"

function Main()

   local oCn, oRs
   local aStateCols, aCustCols
   local oDlg, oBrw

   oCn      := FW_DemoDB()
   oRs      := oCn:RowSet( "states" )

   aStateCols  := { "Code", "Name" }
   aCustCols   := { { "First", "CustName" }, ;
                    { "Age", "CustAge" }, ;
                    { "Salary", "Due", "99,999,999.99" } }

   DEFINE DIALOG oDlg SIZE 400,500 PIXEL TRUEPIXEL

   @ 70,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE oRs COLUMNS aStateCols ;
      CELL LINES NOBORDER FASTEDIT FOOTERS

   oBrw:CreateFromCode()

   @ 10, 20 BTNBMP PROMPT "Customer" SIZE 100,40 PIXEL OF oDlg FLAT ACTION ;
      (  oRs:Requery( "select * from customer" ), ;
         oRs:SetXbrColumns( oBrw, aCustCols ), ;
         oBrw:lFooter := .t., ;
         oBrw:Due:nFooterType := AGGR_SUM, ;
         oBrw:MakeTotals(), ;
         oBrw:Refresh() )

   @ 10,120 BTNBMP PROMPT "States" SIZE 100,40 PIXEL OF oDlg FLAT ACTION ;
      (  oRs:Requery( "select * from states" ), ;
         oRs:SetXbrColumns( oBrw, aStateCols ), ;
         oBrw:lFooter := .f., ;
         oBrw:Refresh() )

   @ 10,220 BTNBMP PROMPT "EDIT" SIZE 100,40 PIXEL OF oDlg FLAT ACTION oBrw:EditSource()

   ACTIVATE DIALOG oDlg CENTERED

   oRs:Close()
   oCn:Close()

return nil


You need recent version of FWH.
Regards



G. N. Rao.

Hyderabad, India
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: XBROWSE - How to change the oRowSet
Posted: Tue Feb 12, 2019 11:06 AM

Thank you Mr Rao,

It's exactly I was needing. Is this working from which version of FWH(I'm using 18 07) ?

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: XBROWSE - How to change the oRowSet
Posted: Tue Feb 12, 2019 11:09 AM

Please try with your version and let me know if it is working for you.

Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: XBROWSE - How to change the oRowSet
Posted: Tue Feb 12, 2019 11:10 AM

Also please see this:

viewtopic.php?f=3t=36740

&

Regards



G. N. Rao.

Hyderabad, India

Continue the discussion