Refrescar XBrowse con Array diferente

Refrescar XBrowse con Array diferente

Postby FranciscoA » Sat Jul 20, 2013 4:59 am

Amigos del Foro.
Estoy tratando de refrescar un mismo Xbrowse, desde arrays diferentes. No lo he podido lograr en 2 dias.
Podría decirme alguien que hago mal en este codigo? Si alguno lo ha hecho, puede suministrarme un ejemplo?
El error se presenta cuando alguno de los arrays posteriores al primero tiene longitud menor, y si es mayor solo presenta columnas segun longitud del primer array cargado.

Error description: Error BASE/1132 Bound error: array access
Args:
[ 1] = A { ... }
[ 2] = N 3

Stack Calls
===========
Called from: D:\FERR_P~1\wfic32.prg => (b)FAPSOFTSCAN( 1834 )
Code: Select all  Expand view
#include "FiveWin.ch"
#INCLUDE "XBROWSE.CH"
#INCLUDE "INKEY.CH"

//----------------------//
Function Main()
local oDlg, oBrw, oCbx, n
local nWidthRes := GetSysMetrics(SM_CXSCREEN)
local nHeightRes := GetSysMetrics(SM_CYSCREEN)
local aInfo:={}, aTitCols:={}, aWMIscan, bMonitoring
local cVar
local aOptions := {" Program Group             ",;
                          " Computer Systen           ",;
                          " Win32 Share                 ",;
                          " Win32 Service               " }

aWMIscan:=FapMonitoring(1)
aInfo:=aWMIscan[1] ; aTitCols:=aWMIscan[2]

DEFINE DIALOG oDlg FROM 1,2 to 15,80 TITLE "FapSoftScan" TRANSPARENT

cVar := aOptions[1]

@2,1 COMBOBOX oCBx VAR cVar OF oDlg ;
     ITEMS aOptions ;
     SIZE 160,12 ;
     ON CHANGE ( aWMIscan:=FapMonitoring(oCBx:nAt()) ,;
                 aInfo:=aWMIscan[1], aTitCols:=aWMIscan[2],;
                 oBrw:SetArray(aInfo),;
                 AEval( oBrw:aCols, { |o,n| o:cHeader := aTitCols[n],;    //aqui se da el error  
                                            o:nHeadStrAlign := AL_CENTER ,;
                                            o:nWidth := 170 } ) ,;
                 oBrw:Refresh(), oBrw:SetFocus() )

@3,1 XBROWSE oBrw OF oDlg ;
     ARRAY {} CELL LINES FOOTERS AUTOSORT

     oBrw:CreateFromCode()
     oBrw:SetArray(aInfo)

     AEval( oBrw:aCols, { |o,n| o:cHeader := aTitCols[n],;
                                o:nHeadStrAlign := AL_CENTER ,;
                                o:nWidth  := 170 } )

 ACTIVATE DIALOG oDlg ;
   ON INIT ( oDlg:SetSize(nWidthRes-10,nHeightRes-50) ,;
             oDlg:Move(1,2) ,;
             oBrw:nHeight:=oDlg:nHeight-163, oBrw:nWidth:=oDlg:nWidth-40, oBrw:nTop:=oDlg:nTop+160 )
Return nil

//-------------------------------------------------------------
Function FapMonitoring(nOption)
local aInfo:={}, aTitCols

if nOption == 1
   aInfo:={{"Info1","Info2","Info3"},{"Info1","Info2","Info3"}}
   aTitCols:={"Col1","Col2","Col3"}
elseif nOption == 2
   aInfo:={{"Info1","Info2"}}
   aTitCols:={"Col1","Col2"}
elseif nOption == 3
   aInfo:={{"Info1","Info2","Info3","Info4"},{"Info1","Info2","Info3","Info4"},{"Info1","Info2","Info3","Info4"},{"Info1","Info2","Info3","Info4"}}
   aTitCols:={"Col1","Col2","Col3","Col4"}
elseif nOption == 4
   aInfo:={{"Info1","Info2","Info3"},{"Info1","Info2","Info3"}}
   aTitCols:={"Col1","Col2","Col3"}
endif
RETURN {aInfo,aTitCols}
 

Gracias de antemano.
Saludos.

upps!!, por longitud diferente me refiero a cantidad de columnas diferentes, sorry.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2131
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Refrescar XBrowse con Array diferente

Postby nageswaragunupudi » Sat Jul 20, 2013 9:57 am

I made a very few modifications in the ON CHANGE clause to avoid the error:
Code: Select all  Expand view

     ON CHANGE ( aWMIscan:=FapMonitoring(oCBx:nAt()) ,;
                 aInfo:=aWMIscan[1], aTitCols:=aWMIscan[2],;
                 oBrw:SetArray(aInfo, .t., 1, .t. ),;
                 AEval( oBrw:aCols, { |o,n| o:cHeader := aTitCols[n],;  
                                            o:nHeadStrAlign := AL_CENTER ,;
                                            o:nWidth := 170 } ) ,;
                 oBrw:nColSel := 1, oBrw:Refresh(.t.), oBrw:SetFocus() )

 
Regards

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

Re: Refrescar XBrowse con Array diferente

Postby nageswaragunupudi » Sat Jul 20, 2013 10:06 am

Your problem is solved with the above corrections.

You can also use the shortcuts below instead of using AEval( oBrw:aCols, ..... )
Code: Select all  Expand view

@ 2,1 COMBOBOX oCBx VAR cVar OF oDlg ;
     ITEMS aOptions ;
     SIZE 160,12 ;
     ON CHANGE ( aWMIscan:=FapMonitoring(oCBx:nAt()) ,;
                 aInfo:=aWMIscan[1], aTitCols:=aWMIscan[2],;
                 oBrw:SetArray(aInfo, .t., 1, .t. ),;
                 oBrw:cHeaders := aTitCols, ;
                 oBrw:nHeadStrAligns := AL_CENTER, ;
                 oBrw:nWidths := 170,;
                 oBrw:nColSel := 1, oBrw:Refresh(.t.), oBrw:SetFocus() )

 
Regards

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

Re: Refrescar XBrowse con Array diferente

Postby FranciscoA » Sat Jul 20, 2013 2:53 pm

Mister Nages,
Yes!, it works. You had me removed a burden.
Many thanks.
Best Regards
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2131
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 114 guests