FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Mr. Rao, refresh a Tree
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Mr. Rao, refresh a Tree
Posted: Fri Feb 09, 2024 02:52 AM

Recd

I will get back to you

Regards



G. N. Rao.

Hyderabad, India
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Mr. Rao, refresh a Tree
Posted: Sat Feb 10, 2024 07:40 PM

Mr. Rao.

Ok

Thanks for your effort

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Mr. Rao, refresh a Tree
Posted: Mon Feb 12, 2024 09:07 PM
When you edit and modify the value of the field "PAR_DES", then you should also change the prompt of treeitem also like this:
Code (fw): Select all Collapse
oBrw:oTreeItem:SetText( cNewValue )
Regards



G. N. Rao.

Hyderabad, India
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Mr. Rao, refresh a Tree
Posted: Mon Feb 12, 2024 11:44 PM

Mr. Rao:

Perfect !

now what should I do to refresh a new branch?

Regards

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Mr. Rao, refresh a Tree
Posted: Tue Feb 13, 2024 12:07 AM
This is a sample code. Still this does not support Append or Delete.
I will show that in my next sample.
I suggest this way of edit dialogs.
Code (fw): Select all Collapse
#include "fivewin.ch"
#include "dbcombo.ch"

static oMarcas, oModelos

function Main()

聽 聽local oCn, oRs, cSql
聽 聽local oDlg, oBrw, oFont

聽 聽FWNumFormat( "A", .t. )
聽 聽SetGetColorFocus()

聽 聽MsgRun( "Connecting", "FW Clould Server", { || ;
聽 聽oCn := maria_Connect( "209.250.245.152,fwh,fwhuser,FiveTech@2022", .t. ) } )
聽 聽if oCn == nil; return nil; endif
聽 聽oCn:lShowErrors := .t.

TEXT INTO cSql
SELECT A.*, B.MAR_DES, C.MOD_DES
聽FROM partes A
聽LEFT JOIN marcas B ON A.PAR_MAR = B.MAR_NUM
聽LEFT JOIN modelos C ON A.PAR_MAR = C.MOD_MAR AND A.PAR_MOD = C.MOD_COD
聽ORDER BY PAR_MAR,PAR_MOD,PAR_COD
ENDTEXT

聽 聽oMarcas 聽:= oCn:RowSet( "marcas" )
聽 聽oModelos := oCn:RowSet( "modelos" )

聽 聽MsgRun( "Opening table", "partes", { || ;
聽 聽oRs 聽 := oCn:RowSet( cSql ) } )

聽 聽DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
聽 聽DEFINE DIALOG oDlg SIZE 700,400 PIXEL TRUEPIXEL FONT oFont RESIZABLE

聽 聽@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
聽 聽 聽 DATASOURCE oRs ;
聽 聽 聽 COLUMNS "MAR_DES","MOD_DES","PAR_DES","PAR_COD";
聽 聽 聽 HEADERS "Marca","Modelo","Nombre o descripci贸n","C贸digo";
聽 聽 聽 CELL LINES NOBORDER

聽 聽WITH OBJECT oBrw
聽 聽 聽 :nStretchCol := 1
聽 聽 聽 :SetTree( 3 )
聽 聽 聽 :oTree:OpenAll()

聽 聽 聽 :lDisplayZeros := .f.
聽 聽 聽 :bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:oTree == nil, CLR_WHITE, CLR_YELLOW ) } }

聽 聽 聽 :bEdit 聽 := { |oRec| Editar( oRec ) }
聽 聽 聽 :blDblClick 聽 聽 聽 := { || oBrw:EditSource() }
聽 聽 聽 :bKeyDown 聽 聽 聽 聽 := { |nKey| IIF(nKey == VK_RETURN, oBrw:EditSource(), ) }

聽 聽 聽 :bChange := { || oDlg:AEvalWhen() }

聽 聽 聽 :CreateFromCode()
聽 聽END

聽 聽@ 10, 20 BUTTON "ADD" 聽 聽SIZE 100,40 PIXEL OF oDlg ACTION MsgInfo( "Not implemented" ) ;
聽 聽 聽 WHEN Empty( oBrw:oTreeItem:oTree )
聽 聽@ 10,140 BUTTON "EDIT" 聽 SIZE 100,40 PIXEL OF oDlg ACTION oBrw:EditSource() ;
聽 聽 聽 WHEN oBrw:oTreeItem:Cargo > 0
聽 聽@ 10,260 BUTTON "Delete" SIZE 100,40 PIXEL OF oDlg ACTION MsgInfo( "Not implemented" ) ;
聽 聽 聽 WHEN Empty( oBrw:oTreeItem:oTree )

聽 聽ACTIVATE DIALOG oDlg CENTERED
聽 聽RELEASE FONT oFont

聽 聽oRs:Close()
聽 聽oCn:Close()

return nil

function Editar( oRec ) // oRec is FW_Record Object

聽 聽local lAppend 聽 聽 := ( oRec:RecNo == 0 )
聽 聽local oBrw 聽 聽 聽 聽:= oRec:oBrw
聽 聽local oTreeItem 聽 := oBrw:oTreeItem
聽 聽local oDlg, oCbx1, oCbx2

聽 聽if lAppend
聽 聽 聽 ? "append not implemented"
聽 聽 聽 return nil
聽 聽endif

聽 聽oRec:bOnSave := { || oTreeItem:cPrompt := oRec:par_des }

聽 聽DEFINE DIALOG oDlg SIZE 400,180 PIXEL TRUEPIXEL

聽 聽@ 聽22, 20 SAY "MAR_DES" SIZE 60,24 PIXEL OF oDlg
聽 聽@ 聽20, 90 DBCOMBO oCbx1 VAR oRec:par_mar SIZE 200,24 PIXEL OF oDlg ;
聽 聽 聽 ALIAS oMarcas ITEMFIELD "MAR_NUM" LISTFIELD "MAR_DES" ;
聽 聽 聽 WHEN lAppend

聽 聽@ 聽52, 20 SAY "MOD_DES" SIZE 60,24 PIXEL OF oDlg
聽 聽@ 聽50, 90 DBCOMBO oCbx2 VAR oRec:par_mod SIZE 200,24 PIXEL OF oDlg ;
聽 聽 聽 ALIAS oModelos ITEMFIELD "MOD_COD" LISTFIELD "MOD_DES" ;
聽 聽 聽 WHEN lAppend

聽 聽@ 聽80, 20 SAY "PAR_DES" GET oRec:par_des SIZE 340,24 PIXEL OF oDlg

聽 聽@ 120, 20 BUTTON "SAVE" 聽SIZE 80,30 PIXEL OF oDlg ACTION ( oRec:Save() )
聽 聽@ 120,140 BUTTON "CLOSE" SIZE 80,30 PIXEL OF oDlg ACTION oDlg:End()

聽 聽ACTIVATE DIALOG oDlg CENTERED

return nil


Please build and run this sample as it is.
In particular, please observe how to simplify the Edit Dialog and how to save changes.
Next we will see how to implement Append and Delete also.
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Mr. Rao, refresh a Tree
Posted: Tue Feb 13, 2024 12:29 PM
This improved sample provides ADD, EDIT and DELETE
Code (fw): Select all Collapse
#include "fivewin.ch"
#include "dbcombo.ch"

REQUEST DBFCDX

static oMarcas, oModelos

function Main()

聽 聽local oCn, oRs, cSql
聽 聽local oDlg, oBrw, oFont, oTree

聽 聽FWNumFormat( "A", .t. )
聽 聽SetGetColorFocus()

聽 聽MsgRun( "Connecting", "FW Clould Server", { || ;
聽 聽oCn := maria_Connect( "209.250.245.152,fwh,fwhuser,FiveTech@2022", .t. ) } )
聽 聽if oCn == nil; return nil; endif
聽 聽oCn:lShowErrors := .t.

TEXT INTO cSql
SELECT A.*, B.MAR_DES, C.MOD_DES
聽FROM partes A
聽LEFT JOIN marcas B ON A.PAR_MAR = B.MAR_NUM
聽LEFT JOIN modelos C ON A.PAR_MAR = C.MOD_MAR AND A.PAR_MOD = C.MOD_COD
聽ORDER BY PAR_MAR,PAR_MOD,PAR_COD
ENDTEXT

聽 聽oMarcas 聽:= oCn:RowSet( "marcas" )
聽 聽oModelos := oCn:RowSet( "modelos" )

聽 聽MsgRun( "Opening table", "partes", { || ;
聽 聽oRs 聽 := oCn:RowSet( cSql ) } )

聽 聽DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
聽 聽DEFINE DIALOG oDlg SIZE 700,600 PIXEL TRUEPIXEL FONT oFont RESIZABLE

聽 聽@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
聽 聽 聽 DATASOURCE oRs ;
聽 聽 聽 COLUMNS "MAR_DES","MOD_DES","PAR_DES","PAR_COD";
聽 聽 聽 HEADERS "Marca","Modelo","Nombre o descripci贸n","C贸digo";
聽 聽 聽 CELL LINES NOBORDER

聽 聽WITH OBJECT oBrw
聽 聽 聽 :nStretchCol := 1
聽 聽 聽 :SetTree( 3 )
聽 聽 聽 :oTree:OpenAll()

聽 聽 聽 :lDisplayZeros := .f.
聽 聽 聽 :bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:oTree == nil, CLR_WHITE, CLR_YELLOW ) } }

聽 聽 聽 :bEdit 聽 := { |oRec| Editar( oRec ) }
聽 聽 聽 :blDblClick 聽 聽 聽 := { || oBrw:EditSource() }
聽 聽 聽 :bKeyDown 聽 聽 聽 聽 := { |nKey| IIF(nKey == VK_RETURN, oBrw:EditSource(), ) }

聽 聽 聽 :bChange := { || oDlg:AEvalWhen() }

聽 聽 聽 :CreateFromCode()
聽 聽END

聽 聽@ 10, 20 BUTTON "ADD" 聽 聽SIZE 100,40 PIXEL OF oDlg ACTION oBrw:EditSource( .t. )
聽 聽@ 10,140 BUTTON "EDIT" 聽 SIZE 100,40 PIXEL OF oDlg ACTION oBrw:EditSource() ;
聽 聽 聽 WHEN oBrw:oTreeItem:Cargo > 0
聽 聽@ 10,260 BUTTON "Delete" SIZE 100,40 PIXEL OF oDlg ACTION ( ;
聽 聽 聽 oBrw:Delete(), oBrw:oTreeItem:Delete(), oBrw:Refresh(), oBrw:Change() ) 聽;
聽 聽 聽 WHEN oBrw:oTreeItem:Cargo > 0

聽 聽ACTIVATE DIALOG oDlg CENTERED
聽 聽RELEASE FONT oFont

聽 聽oRs:Close()
聽 聽oCn:Close()

return nil

function Editar( oRec ) // oRec is FW_Record Object

聽 聽local lAppend 聽 聽 := ( oRec:RecNo == 0 )
聽 聽local oBrw 聽 聽 聽 聽:= oRec:oBrw
聽 聽local oTreeItem 聽 := oBrw:oTreeItem
聽 聽local oDlg, oCbx1, oCbx2

聽 聽if lAppend
聽 聽 聽 oRec:bOnSave := { |oRec| OnAppend( oRec ), oDlg:End() }
聽 聽else
聽 聽 聽 oRec:bOnSave := { || oTreeItem:cPrompt := oRec:par_des }
聽 聽endif

聽 聽oRec:bValid := { |o| !( EMPTY( o:par_mar ) .or. EMPTY( o:par_mod ) .or. EMPTY( o:par_cod ) ) }

聽 聽DEFINE DIALOG oDlg SIZE 400,220 PIXEL TRUEPIXEL

聽 聽@ 聽22, 20 SAY "MAR_DES" SIZE 60,24 PIXEL OF oDlg
聽 聽@ 聽20, 90 DBCOMBO oCbx1 VAR oRec:par_mar SIZE 200,24 PIXEL OF oDlg ;
聽 聽 聽 ALIAS oMarcas ITEMFIELD "MAR_NUM" LISTFIELD "MAR_DES" ;
聽 聽 聽 WHEN lAppend

聽 聽oCbx1:bChange := <||
聽 聽 聽 oModelos:Filter := "MOD_MAR=" + cValToChar( oRec:par_mar )
聽 聽 聽 oModelos:MoveFirst()
聽 聽 聽 oCbx2:Refill()
聽 聽 聽 oCbx2:Refresh()
聽 聽 聽 return .t.
聽 聽 聽 >

聽 聽@ 聽52, 20 SAY "MOD_DES" SIZE 60,24 PIXEL OF oDlg
聽 聽@ 聽50, 90 DBCOMBO oCbx2 VAR oRec:par_mod SIZE 200,24 PIXEL OF oDlg ;
聽 聽 聽 ALIAS oModelos ITEMFIELD "MOD_COD" LISTFIELD "MOD_DES" ;
聽 聽 聽 WHEN lAppend

聽 聽@ 聽80, 20 SAY "PAR_COD" GET oRec:par_cod SIZE 200,24 PIXEL OF oDlg

聽 聽@ 110, 20 SAY "PAR_DES" GET oRec:par_des SIZE 340,24 PIXEL OF oDlg

聽 聽@ 160, 20 BUTTON "SAVE" 聽SIZE 80,30 PIXEL OF oDlg ACTION oRec:Save( .t. ) ;
聽 聽 聽 WHEN oRec:Modified()
聽 聽@ 160,140 BUTTON "CLOSE" SIZE 80,30 PIXEL OF oDlg ACTION oDlg:End()

聽 聽ACTIVATE DIALOG oDlg CENTERED

return nil

static function OnAppend( oRec )

聽 聽local nNewRec 聽:= oRec:RecNo
聽 聽local oBrw 聽 聽 := oRec:oBrw
聽 聽local oRs 聽 聽 聽:= oBrw:uDataSource
聽 聽local oTree, nLen, oItem
聽 聽local aBlocks 聽:= { 聽{ || oRs:Fields( "MAR_DES" ):Value }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { || oRs:Fields( "MOD_DES" ):Value }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { || oRs:Fields( "PAR_DES" ):Value } 聽}

聽 聽oRs:ReQuery()
聽 聽oRs:Sort := "PAR_MAR,PAR_MOD,PAR_COD"
聽 聽oRs:MoveFirst()
聽 聽nLen 聽:= oRs:RecordCount()

聽 聽oTree := SummaryDataAsTree( ;
聽 聽 聽 { || oRs:Move( 1 ) }, { |nRow| nRow > nLen }, aBlocks, { || oRs:BookMark } )
聽 聽oTree:OpenAll()
聽 聽oBrw:oTree 聽:= oTree
聽 聽oBrw:GoTop()
聽 聽oBrw:Refresh()

return nil
Regards



G. N. Rao.

Hyderabad, India
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Mr. Rao, refresh a Tree
Posted: Wed Feb 14, 2024 09:30 PM

Mr. Rao:

Thanks, I'll try it.

Regards

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero

Continue the discussion