Nachdem ich mich einige Zeit mit dem Beispielprogramm bei eXPress++
v 1.9 herumgespielt habe und das Problem nicht lösen kann wende ich mich
an die Anwender die eXPress++ verwenden.
Das Sample habe ich für meine Zwecke umgeändert (nur die Datenbanken ausgetauscht). Im Prinzip funktioniert es genauso wie im DEMO nur das die Anzeige der Daten im rechten Bereich (Kunden, Rechnungskopfdaten, Rechnungspositionen) nicht beim Skippen gelöscht werden sondern einfach überschrieben werden. Das Problem liegt bei der Funktion DC_GetRefresh!
Code: Alles auswählen
FUNCTION XSample_170()
/* This example shows how to create a treeview browse of
three relational databases. */
LOCAL GetList := {}, GetOptions, oTree, oTreeCustomer, oTreeInvoice, ;
bInv, bItems, oScrn, oCustomerGroup, oInvoiceGroup, oInvoiceItemGroup
dbeSetDefault('DBFCDX')
USE CUSTOMER INDEX CUSTOMER
USE INVOICE INDEX INVOICE NEW
USE INVITEMS INDEX INVITEMS NEW
bInv := {|| INVOICE->(DC_SetScope(0,CUSTOMER->cust_nmbr)), ;
INVOICE->(DC_SetScope(1,CUSTOMER->cust_nmbr)), ;
INVOICE->(DC_DbGoTop()) }
bItems := {|| INVITEMS->(DC_SetScope(0,INVOICE->inv_nmbr)), ;
INVITEMS->(DC_SetScope(1,INVOICE->inv_nmbr)), ;
INVITEMS->(DC_DbGoTop()) }
@ 0,0 DCTREEROOT ;
OBJECT oTree ;
SIZE 40,23 ;
ITEMMARKED {|oItem|_DisplayCustomerData(oItem,GetList)}
/*
DO WHILE !CUSTOMER->(DC_Eof())
DCTREEITEM ;
PARENT oTree ;
CAPTION CUSTOMER->bill_name ;
CARGO { 'CUSTOMER', CUSTOMER->(RecNo()) } ;
OBJECT oTreeCustomer ;
IMAGENORMAL ICON_CUSTOMER ;
IMAGEMARKED ICON_CUSTOMER ;
IMAGEEXPANDED ICON_CUSTOMER
Eval(bInv)
DO WHILE !INVOICE->(DC_Eof())
DCTREEITEM ;
PARENT oTreeCustomer ;
CARGO { 'INVOICE', INVOICE->(RecNo()) } ;
CAPTION INVOICE->inv_nmbr ;
OBJECT oTreeInvoice ;
IMAGENORMAL ICON_INVOICE ;
IMAGEMARKED ICON_INVOICE ;
IMAGEEXPANDED ICON_INVOICE
Eval(bItems)
DO WHILE !INVITEMS->(DC_Eof())
DCTREEITEM ;
PARENT oTreeInvoice ;
CARGO {'INVITEMS', INVITEMS->(RecNo()) } ;
CAPTION INVITEMS->part_nmbr + ' ' + INVITEMS->desc ;
IMAGENORMAL ICON_INVITEM ;
IMAGEMARKED ICON_INVITEM ;
IMAGEEXPANDED ICON_INVITEM
INVITEMS->(DC_DbSkip())
ENDDO
INVOICE->(DC_DbSkip())
ENDDO
CUSTOMER->(DC_DbSkip())
ENDDO
*/
@ 0,45 DCGROUP oCustomerGroup CAPTION 'Customer' SIZE 60,8 FONT '9.Courier Bold'
DCSETPARENT TO oCustomerGroup
@ 1,1 DCSAY {||CUSTOMER->bill_name}
@ 2,1 DCSAY {||CUSTOMER->bill_strt}
@ 3,1 DCSAY {||CUSTOMER->bill_city}
@ 4,1 DCSAY {||CUSTOMER->bill_state}
@ 5,1 DCSAY {||CUSTOMER->bill_zip}
@ 6,1 DCSAY {||CUSTOMER->phone}
@ 7,1 DCSAY {||CUSTOMER->contact}
DCSETPARENT TO
@ 9,45 DCGROUP oInvoiceGroup CAPTION 'Invoice' SIZE 60,6 FONT '9.Courier Bold'
DCSETPARENT oInvoiceGroup
@ 1,1 DCSAY {||'Ship Date: ' + Dtoc(INVOICE->ship_date)}
@ 2,1 DCSAY {||'Balance : ' + Alltrim(Str(INVOICE->balance))}
@ 3,1 DCSAY {||'P.O. Nmbr: ' + INVOICE->po_nmbr}
@ 4,1 DCSAY {||'Terms : ' + INVOICE->terms}
@ 5,1 DCSAY {||'How Ship : ' + INVOICE->how_ship}
DCSETPARENT TO
@ 16,45 DCGROUP oInvoiceItemGroup CAPTION 'Invoice Items' SIZE 60,7 FONT '9.Courier Bold'
DCSETPARENT oInvoiceItemGroup
@ 1,1 DCSAY {||'Description:' + Pad(INVITEMS->desc,45)}
@ 2,1 DCSAY {||'Qty Ordered:' + Alltrim(Str(INVITEMS->qty_ord))}
@ 3,1 DCSAY {||'Qty Shipped:' + Alltrim(Str(INVITEMS->qty_shp))}
@ 4,1 DCSAY {||'Qty B/O :' + Alltrim(Str(INVITEMS->qty_bo))}
@ 5,1 DCSAY {||'Unit Issue :' + INVITEMS->u_issue}
@ 6,1 DCSAY {||'Unit Price :' + Alltrim(Str(INVITEMS->u_price))}
DCGETOPTIONS ;
SAYFONT '7.Courier' ;
SAYWIDTH 350 ;
TABSTOP ;
AUTORESIZE
DCREAD GUI ;
FIT ;
ADDBUTTONS ;
OPTIONS GetOptions ;
MODAL ;
TITLE 'Customer/Invoice/Items Tree' ;
EVAL {||BuildTree(oTree,bInv,bItems)}
RETURN nil
* ------------
STATIC FUNCTION BuildTree( oTree, bInv, bItems )
LOCAL oTreeCustomer, oTreeInvoice, oTreeInvoiceItem
oTree:lockUpdate(.t.)
DO WHILE !CUSTOMER->(DC_Eof())
oTreeCustomer := XbpTreeViewItem():new()
oTreeCustomer:caption := CUSTOMER->bill_name
oTreeCustomer:cargo := { 'CUSTOMER', CUSTOMER->(RecNo()) }
oTreeCustomer:image := ICON_CUSTOMER
oTreeCustomer:expandedimage := ICON_CUSTOMER
oTreeCustomer:markedimage := ICON_CUSTOMER
oTreeCustomer:create()
oTree:rootItem:additem(oTreeCustomer)
Eval(bInv)
DO WHILE !INVOICE->(DC_Eof())
oTreeInvoice := XbpTreeViewItem():new()
oTreeInvoice:caption := INVOICE->inv_nmbr
oTreeInvoice:cargo := { 'INVOICE', INVOICE->(RecNo()) }
oTreeInvoice:image := ICON_INVOICE
oTreeInvoice:expandedimage := ICON_INVOICE
oTreeInvoice:markedimage := ICON_INVOICE
oTreeInvoice:create()
oTreeCustomer:additem(oTreeInvoice)
Eval(bItems)
DO WHILE !INVITEMS->(DC_Eof())
oTreeInvoiceItem := XbpTreeViewItem():new()
oTreeInvoiceItem:caption := INVITEMS->part_nmbr + ' ' + INVITEMS->desc
oTreeInvoiceItem:cargo := {'INVITEMS', INVITEMS->(RecNo()) }
oTreeInvoiceItem:image := ICON_INVITEM
oTreeInvoiceItem:expandedimage := ICON_INVITEM
oTreeInvoiceItem:markedimage := ICON_INVITEM
oTreeInvoiceItem:create()
oTreeInvoice:additem(oTreeInvoiceItem)
INVITEMS->(DC_DbSkip())
ENDDO
INVOICE->(DC_DbSkip())
ENDDO
CUSTOMER->(DC_DbSkip())
ENDDO
oTree:lockUpdate(.f.)
RETURN nil
* ------------
STATIC FUNCTION _DisplayCustomerData( oItem, GetList )
LOCAL a
a := oItem:cargo
(a[1])->(dbGoto(a[2]))
IF a[1]=='CUSTOMER'
INVOICE->(dbGoBottom())
INVOICE->(dbSkip())
INVITEMS->(dbGoBottom())
INVITEMS->(dbSkip())
ELSEIF a[1]=='INVOICE'
INVITEMS->(dbGoBottom())
INVITEMS->(dbSkip())
ENDIF
DC_GetRefresh(GetList)
RETURN nil
*** END OF EXAMPLE ***
ps.Im Original-Demo von eXPress++ ist die Anzeige korrekt!
lg
Hans