No refresca totales con TXBrowse ,Solucionado!!?

Re: No refresca totales con TXBrowse ,Solucionado!!?

Postby Manuel Aranda » Sun Sep 01, 2013 10:20 am

Retomando este hilo de ACC69 he construído un ejemplo sobre otro anterior para que se aprecie cual es el problema de refresco del :bFooter.
Cuando se actualiza el xBrowse con nuevos datos :bFooter no se refresca.
En el ejemplo que se adjunta, en el xbrowse HIJO el total del campo edad se queda congelado y no se refresca.

Este es enlace al prg y ejecutable del ejemplo: http://creafile.com/download/6d0b86bf28 ... 08a1b.html

Nota: Ejecutar primero la opción de Listbox y luego xBrowse, sino dará error.


Pego aquí el prg:
Code: Select all  Expand view  RUN

#include "FiveWin.ch"
#include "Ord.ch"
#include "xbrowse.ch"

static oWnd
STATIC aSelePro
//----------------------------------------------------------------------------//

function Main()

   CreaFicheros()
   IndexaFicheros()
   AbreFicheros()

   DEFINE WINDOW oWnd FROM 1, 5 TO 20, 70 ;
      MENU BuildMenu()

   //
   ACTIVATE WINDOW oWnd

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

   local oMenu
   local oFirst, oSecond
   MENU oMenu
      MENUITEM "Prueba browse"
      MENU
         MENUITEM oFirst PROMPT "ListBox" ;
            ACTION PruebaBrowse("L")

         MENUITEM oSecond PROMPT "XBrowse";
            ACTION PruebaBrowse("X")

      ENDMENU
   ENDMENU
return oMenu

//----------------------------------------------------------------------------//

******************************
static function CreaFicheros()
******************************
Local aDbf

IF !FILE("PADRE.DBF")
   //
   aDbf := {}
   AADD(aDbf,{"Clave","C",1,0})
   AADD(aDbf,{"Nombre","C",40,0})
   DBCREATE("PADRE",aDbf)
   USE PADRE
   //
   PADRE->(DbAppend())
   REPLACE PADRE->Clave  WITH "1"
   REPLACE PADRE->Nombre WITH "PADRE 1"
   //
   PADRE->(DbAppend())
   REPLACE PADRE->Clave  WITH "2"
   REPLACE PADRE->Nombre WITH "PADRE 2"
   //
   PADRE->(DbAppend())
   REPLACE PADRE->Clave  WITH "3"
   REPLACE PADRE->Nombre WITH "PADRE 3"
   //
   PADRE->(DbAppend())
   REPLACE PADRE->Clave  WITH "4"
   REPLACE PADRE->Nombre WITH "PADRE 4"
   //
   USE
   //
ENDIF
//
IF !FILE("HIJO.DBF")
   //
   aDbf := {}
   AADD(aDbf,{"ClaveP","C",1,0})
   AADD(aDbf,{"Clave","C",1,0})
   AADD(aDbf,{"Nombre","C",40,0})
   AADD(aDbf,{"Edad","N",2,0})
   DBCREATE("HIJO",aDbf)
   USE HIJO
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "1"
   REPLACE HIJO->Clave   WITH "1"
   REPLACE HIJO->Nombre WITH "HIJO 1 DE PADRE 1"
   REPLACE HIJO->Edad   WITH 20
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "1"
   REPLACE HIJO->Clave  WITH "2"
   REPLACE HIJO->Nombre WITH "HIJO 2 DE PADRE 1"
   REPLACE HIJO->Edad   WITH 30
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "1"
   REPLACE HIJO->Clave  WITH "3"
   REPLACE HIJO->Nombre WITH "HIJO 3 DE PADRE 1"
   REPLACE HIJO->Edad   WITH 22
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "2"
   REPLACE HIJO->Clave   WITH "1"
   REPLACE HIJO->Nombre WITH "HIJO 1 DE PADRE 2"
   REPLACE HIJO->Edad   WITH 32
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "2"
   REPLACE HIJO->Clave  WITH "2"
   REPLACE HIJO->Nombre WITH "HIJO 2 DE PADRE 2"
   REPLACE HIJO->Edad   WITH 16
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "3"
   REPLACE HIJO->Clave   WITH "1"
   REPLACE HIJO->Nombre WITH "HIJO 1 DE PADRE 3"
   REPLACE HIJO->Edad   WITH 12
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "3"
   REPLACE HIJO->Clave  WITH "2"
   REPLACE HIJO->Nombre WITH "HIJO 2 DE PADRE 3"
   REPLACE HIJO->Edad   WITH 18
   //
   HIJO->(DbAppend())
   REPLACE HIJO->ClaveP  WITH "4"
   REPLACE HIJO->Clave   WITH "1"
   REPLACE HIJO->Nombre WITH "HIJO 1 DE PADRE 4"
   REPLACE HIJO->Edad   WITH 45
   //
   USE
   //
ENDIF
//
IF !FILE("NIETO.DBF")
   //
   aDbf := {}
   AADD(aDbf,{"ClaveP","C",1,0})
   AADD(aDbf,{"ClaveH","C",1,0})
   AADD(aDbf,{"Clave","C",1,0})
   AADD(aDbf,{"Nombre","C",40,0})
   DBCREATE("NIETO",aDbf)
   USE NIETO
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "1"
   REPLACE NIETO->ClaveH  WITH "1"
   REPLACE NIETO->Clave   WITH "1"
   REPLACE NIETO->Nombre WITH "NIETO 1 DE HIJO 1 DE PADRE 1"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "1"
   REPLACE NIETO->ClaveH  WITH "1"
   REPLACE NIETO->Clave  WITH "2"
   REPLACE NIETO->Nombre WITH "NIETO 2 DE HIJO 1 DE PADRE 1"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "1"
   REPLACE NIETO->ClaveH  WITH "1"
   REPLACE NIETO->Clave  WITH "3"
   REPLACE NIETO->Nombre WITH "NIETO 3 DE HIJO 1 DE PADRE 1"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "2"
   REPLACE NIETO->ClaveH  WITH "2"
   REPLACE NIETO->Clave   WITH "1"
   REPLACE NIETO->Nombre WITH "NIETO 1 DE HIJO 2 DE PADRE 2"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "2"
   REPLACE NIETO->ClaveH  WITH "2"
   REPLACE NIETO->Clave  WITH "2"
   REPLACE NIETO->Nombre WITH "NIETO 2 DE HIJO 2 DE PADRE 2"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "1"
   REPLACE NIETO->ClaveH  WITH "2"
   REPLACE NIETO->Clave  WITH "1"
   REPLACE NIETO->Nombre WITH "NIETO 1 DE HIJO 2 DE PADRE 1"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "1"
   REPLACE NIETO->ClaveH  WITH "2"
   REPLACE NIETO->Clave  WITH "2"
   REPLACE NIETO->Nombre WITH "NIETO 2 DE HIJO 2 DE PADRE 1"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "2"
   REPLACE NIETO->ClaveH  WITH "1"
   REPLACE NIETO->Clave  WITH "1"
   REPLACE NIETO->Nombre WITH "NIETO 1 DE HIJO 1 DE PADRE 2"
   //
   NIETO->(DbAppend())
   REPLACE NIETO->ClaveP  WITH "2"
   REPLACE NIETO->ClaveH  WITH "1"
   REPLACE NIETO->Clave  WITH "2"
   REPLACE NIETO->Nombre WITH "NIETO 2 DE HIJO 1 DE PADRE 2"
   //
   USE
   //
ENDIF
//

return nil

*********************************
static function IndexaFicheros()
********************************

IF !FILE("HIJO.CDX")
   USE HIJO
   INDEX ON HIJO->ClaveP+HIJO->Clave TO HIJO
   USE
ENDIF
//
IF !FILE("NIETO.CDX")
   USE NIETO
   INDEX ON NIETO->ClaveP+NIETO->ClaveH+NIETO->Clave TO NIETO
   USE
ENDIF
//
return nil

*********************************
static function AbreFicheros()
********************************
USE HIJO  INDEX HIJO  NEW
USE NIETO INDEX NIETO NEW
USE PADRE NEW
return nil

//
*********************************************
static function PruebaBrowse(cTipo)
*********************************************
Local oDlg
Local oBrwPadre
Local oBrwHijo
Local oBrwNieto
local oCol

//
DEFINE DIALOG oDlg RESOURCE "GENERAL"
//
////////////////////////////////////////////////////
/////////////////// BROWSE DE PADRE       //////////
////////////////////////////////////////////////////
//
IF cTipo = "L"

   REDEFINE LISTBOX oBrwPadre ;
         FIELDS IIF(ASCAN(aSelePro,PADRE->Clave+"-"+Padre->Nombre)=0," ",aLevel[ 2 ] ),;
         PADRE->Clave+" ",;
         +PADRE->Nombre;
         FIELDSIZES 32,276;
         HEADERS "Clave"," Nombre ";
         ID 100;
         OF oDlg

ELSE
   REDEFINE xBrowse oBrwPadre ID 100 OF oDlg ;
   COLUMNS "Clave","Nombre" ;
   ALIAS "Padre" CELL LINES FOOTERS

   Estilo(oBrwPadre)
ENDIF

oBrwPadre:bChange:= {|| (Actualiza1(oBrwHijo),Actualiza2(oBrwNieto))}

////////////////////////////////////////////
/////////////////// BROWSE DE HIJO  ////////
////////////////////////////////////////////
//
DbSelectArea("HIJO")
//
IF cTipo = "L"
   REDEFINE LISTBOX oBrwHijo ;
         FIELDS Hijo->Clave+" ",;
         +Hijo->Nombre;
         FIELDSIZES 32,276,16;
         HEADERS "Clave"," Nombre ";
         ID 200;
         OF oDlg
ELSE
   REDEFINE xBrowse oBrwHijo ID 200 OF oDlg ;
   COLUMNS "Clave","Nombre","Edad" ;
   ALIAS "Hijo" CELL LINES  FOOTERS

   Estilo(oBrwHijo)

   oBrwHijo:lFooter := .t.
   oBrwHijo:aCols[1]:bFooter :={|| Str(HIJO->( OrdKeyCount() ),2,0) }
   oBrwHijo:aCols[3]:nFooterType:=AGGR_TOTAL
   oBrwHijo:MakeTotals()

ENDIF

oBrwHijo:bChange:= {|| Actualiza2(oBrwNieto)}

//
////////////////////////////////////////////////
/////////////////// BROWSE DE NIETO/////////////
////////////////////////////////////////////////
//
DbSelectArea("NIETO")
//
IF cTipo = "L"
   REDEFINE LISTBOX oBrwNieto ;
         FIELDS Nieto->Clave+" ",;
         +Nieto->Nombre;
         FIELDSIZES 32,276,16;
         HEADERS "Clave"," Nombre ";
         ID 300;
         OF oDlg
ELSE
   REDEFINE xBrowse oBrwNieto ID 300 OF oDlg ;
   COLUMNS "Clave","Nombre" ;
   ALIAS "Nieto" CELL LINES  FOOTERS

   Estilo(oBrwNieto)
ENDIF

DbSelectArea("PADRE")

ACTIVATE DIALOG oDlg CENTER // ON  INIT ( Actualiza1(oBrwHijo), Actualiza2(oBrwNieto) )

return nil

************************************
STATIC FUNCTION Actualiza1(oBrwHijo)
************************************
//
HIJO->(ordscope(TOPSCOPE, PADRE->Clave))
HIJO->(ordscope(BOTTOMSCOPE, PADRE->Clave))
HIJO->(DbGoTop())
oBrwHijo:refresh()
return nil

*************************************
STATIC FUNCTION Actualiza2(oBrwNieto)
*************************************
//
NIETO->(ordscope(TOPSCOPE, PADRE->Clave+HIJO->Clave))
NIETO->(ordscope(BOTTOMSCOPE, PADRE->Clave+HIJO->Clave))
NIETO->(DbGoTop())
oBrwNieto:refresh()
return nil

//-------------------------
STATIC Function Estilo(oBrw)
  WITH OBJECT oBrw
   :nMarqueeStyle       := MARQSTYLE_HIGHLROW
   :nColDividerStyle    := LINESTYLE_BLACK
   :bClrSel             := {|| { nRGB(  0,  0,255), nRGB(255,248,220) } }
   :lColDividerComplete := .t.
   :nHeaderLines        := 1
   :nDataLines          := 1
  END
Return nil


 



Y aquí el .RC
Code: Select all  Expand view  RUN

// RESOURCE SCRIPT generated by "Pelles C for Windows, version 5.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_SPANISH,SUBLANG_SPANISH_MODERN

GENERAL DIALOGEX FIXED IMPURE 6, 18, 244, 252
STYLE WS_POPUP|DS_MODALFRAME|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_VISIBLE
FONT 10, "MS Sans Serif", 0, 0, 1
{
  CONTROL "", 100, "TWBrowse", WS_TABSTOP|0x00b00000, 12, 10, 220, 72
  CONTROL "", 200, "TWBrowse", WS_TABSTOP|0x00b00000, 12, 86, 220, 72
  CONTROL "", 300, "TWBrowse", WS_TABSTOP|0x00b00000, 12, 164, 220, 72
}



 
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: No refresca totales con TXBrowse ,Solucionado!!?

Postby nageswaragunupudi » Thu Sep 05, 2013 5:48 am

#1. You are using DBFNTX not DBFCDX.
You may check for File( "....NTX" ) not CDX while creating indexes.

#2. If you want to use XBrowse with RESOURCE, you should use control name as TXBrowse not TWBrowse in the RC file like this:
Code: Select all  Expand view  RUN
{
  CONTROL "", 100, "TXBrowse", WS_TABSTOP|0x00b00000, 12, 10, 220, 72
  CONTROL "", 200, "TXBrowse", WS_TABSTOP|0x00b00000, 12, 86, 220, 72
  CONTROL "", 300, "TXBrowse", WS_TABSTOP|0x00b00000, 12, 164, 220, 72
}
 


#3. In FUNCTION Actualiza1(oBrwHijo), insert oBrwHijo:MakeTotals() before oBrwHijo:Refresh()
This is the revised function
Code: Select all  Expand view  RUN
STATIC FUNCTION Actualiza1(oBrwHijo)
************************************
//
HIJO->(ordscope(TOPSCOPE, PADRE->Clave))
HIJO->(ordscope(BOTTOMSCOPE, PADRE->Clave))
HIJO->(DbGoTop())
oBrwHijo:MakeTotals()   // INSERTED NOW
oBrwHijo:refresh()
return nil
 


With these changes, your program is working as expected.

Image

Optional:
You may also use
Code: Select all  Expand view  RUN
  oBrwHijo:aCols[1]:bFooter := { || oBrwHijo:nLen }
 

instead of:
Code: Select all  Expand view  RUN
  oBrwHijo:aCols[1]:bFooter := { || Str(HIJO->( OrdKeyCount() ),2,0) }
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: No refresca totales con TXBrowse ,Solucionado!!?

Postby Manuel Aranda » Thu Sep 05, 2013 6:34 am

Mr. Rao, thank you for your diligence and help
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: groiss and 54 guests