Multiarray en xBrowse

Post Reply
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Multiarray en xBrowse

Post by MarioG »

Estimados;
Tengo un array con este formato: aDatos:= { { dato1, {a1,b1,c1,d1} }, { dato2, {a2,b2,c2,g2} },....}
(Si bien lo tengo con wbrowse de Checcarelli, ahora pretendo pasarlo a xbrowse)
la idea es que el browse muestre los datos así:
|dato1|a1|b1|c1|d1|
|dato2|a2|b2|c2|d2|
...
|datox|ax|bx|cx|dx|

Desde ya muchas gracias
Saludos
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
pablovidal
Posts: 398
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana
Contact:

Re: Multiarray en xBrowse

Post by pablovidal »

Code: Select all

aDatos := {{ dato1, a1,b1,c1,d1}, { dato1, a1,b1,c1,d1}, { dato1, a1,b1,c1,d1}, { dato1, a1,b1,c1,d1} }
 
Saludos,

Pablo Alberto Vidal
/*
------------------------------------------------------
Harbour 3.2.0, Fivewin 17.02, BCC7
------------------------------------------------------
*/
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Post by MarioG »

Pablo;
gracias por responder.
Por lo visto escribí mal mi consulta. Lo que no puedo hacer es definir el xbrowse.
Hice esto, usando la misma logica de wbrowse, pero me da error

Code: Select all

oLst:= TXBrowse():New()
   oLst:SetArray( aDatos, .f. )

   WITH Object oLst
      :nMarqueeStyle      := MARQSTYLE_HIGHLROWMS     // barra señaladora
      :nColDividerStyle   := LINESTYLE_BLACK          // Linea Tipo
      :lColDividerComplete:= TRUE                     // Linea de columna hasta final de Brw
      :nStretchCol        := STRETCHCOL_LAST          // Ajustar ultima col, al margen derecho
      :l2007              := TRUE
   END

   WITH OBJECT oLst:AddCol()
      :cHeader:= "Columna1"
      :bStrData:= {|| aDatos[oLst:nAt,1] }
   END

   WITH OBJECT oLst:AddCol()
      :cHeader:= "Columna2"
      :bStrData:= {|| aDatos[oLst:nAt,2,1] }
   END

   oLst:CreateFromCode()
Cual sería la correcta forma de hacerlo (o que ej. me sugieren mirar)
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Multiarray en xBrowse

Post by Daniel Garcia-Gil »

Hola

Mario, cual es el error que te genera?

intenta de esta forma

Code: Select all

WITH OBJECT oLst:AddCol()
      :cHeader:= "Columna1"
      :nArrayCol := 1  // aqui vas seleccionando las "columnas" del array
END
en ste caso no te haria falta bStrData
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Post by MarioG »

Daniel;
gracias por responder
Si uso, segun tu sugerencia;

Code: Select all

   WITH OBJECT oLst:AddCol()
      :cHeader:= "Version"
      :nArrayCol:= 1
      //:bStrData:= {|| Decrypt( ::aSesamoIni[oLst:nAt,1] ) }
   END
 
obtengo el siguiente browse
Image
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Post by MarioG »

diculpas; se me escapó Enviar en lugar de Vista Previa :oops:

Explico un poco lo que se muestra
como expuse en el primer post el array tiene esta forma: aDatos:= { { dato1, {a1,b1,c1,d1} }, { dato2, {a2,b2,c2,g2} },....}; en el que, aclaro, todos los datos estan encriptados
Ahora bien, haciendo como me propoen Daniel, en la vista del browse me esta difieniendo dos columnas A y B, que ignoro que son, aunque puedo deducir que la columna A, muestra lo mismo que la columna "Version", o sea "dato1"..."datonn" (valores encritados) y, la colmuna B me estaría diciendo, correctamente, que la columna 2 contiene un array.
Y como de xBrowse entiendo poco, no se porque si le pido que me muestra solo la primer columna, me esta mostrando 3 (Solo para comentar lo propuesto por Daniel, ya que me faltaría saber como muestro el resto).

Por otro lado si codifico así:

Code: Select all

   WITH OBJECT oLst:AddCol()
      :cHeader:= "Version"
      //:nArrayCol:= 1
      :bStrData:= {|| Decrypt( ::aSesamoIni[oLst:nAt,1] ) }
   END
 
entonces se produce el siguiente error:
Descripción de Error generado:
___________________________________________________

Error BASE/1111 Error de argumento: LEN
Args:
[ 1] = U


Llamadas al Stack:
___________________________________________________

Llamado desde: LEN(0)
Llamado desde: .\source\classes\XBROWSE.PRG (b)TXBROWSE:TXBROWSE(498)
Llamado desde: TXBROWSE:COLATPOS(0)
Llamado desde: .\source\classes\XBROWSE.PRG (b)TXBROWSE:TXBROWSE(500)
Llamado desde: TXBROWSE:SELECTEDCOL(0)
Llamado desde: .\source\classes\XBROWSE.PRG (b)TXBROWSE:TXBROWSE(331)
Llamado desde: TXBROWSE:NAT(0)
Llamado desde: D:\Fuen32\Temp\mgsesamo.prg (b)TSESAMO:LSTMGAPP(782)
Llamado desde: .\source\classes\XBROWSE.PRG TXBRWCOLUMN:ADJUST(8173)
Llamado desde: .\source\classes\XBROWSE.PRG TXBROWSE:ADJUST(943)
Llamado desde: .\source\classes\XBROWSE.PRG TXBROWSE:INITIATE(851)
Llamado desde: __OBJSENDMSG(0)
Llamado desde: HB_EXECFROMARRAY(0)
Llamado desde: .\source\function\HARBOUR.PRG OSEND(219)
Llamado desde: HB_EXECFROMARRAY(0)
Llamado desde: .\source\function\HARBOUR.PRG ASEND(197)
Llamado desde: .\source\classes\DIALOG.PRG TDIALOG:INITIATE(664)
Llamado desde: .\source\classes\DIALOG.PRG TDIALOG:HANDLEEVENT(928)
Llamado desde: DIALOGBOXINDIRECT(0)
Llamado desde: .\source\classes\DIALOG.PRG TDIALOG:ACTIVATE(273)
Llamado desde: D:\Fuen32\Temp\mgsesamo.prg TSESAMO:LSTMGAPP(830)
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Multiarray en xBrowse

Post by Raymundo Islas M. »

Mario,

La estructura del array es como lo indica Pablo, { {....}, {....}, {....}, {....} } ya que cada subarray pasa a ser un "registro" y cada dato de ese subarray es un "campo".

Ignoro si existe alguna forma de mezclar diferentes tipos de datos y que se muestren correctamente.


Esta es la manera como defino mi xbrowse :

Code: Select all

redefine xbrowse lbCstsFrc id 101 of oFldrCptSrc:aDialogs[3] ;
    columns 3,2,1 ;
    headers 'R.F.C.','RAZON SOCIAL','ID' ;
    pictures nil,nil,"999,999" ;
    colsizes 105,150,50 ;
    on change xxxxx() ;
    footers ;
    array { {0,"","",.f.,0,0,.f.,1} } ;
    font aSysFnts[1] autosort
Como puedes observar, en [ columns ] indicas cuales y en que orden quieres mostrar tus datos y [ array ] es la estructura de tus datos.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Post by MarioG »

Raimundo; gracias por participar de la consulta
No se porque Pablo indica ese tipo de estructura, pero no es mi caso. Quizas el lo que esta proponiendo es que cambie mi estructura y al primer campo lo ponga en un array, aunque eso implicaría bastantes cambios en el resto del fuente.
Mi caso es un array de este tipo: aDatos:= { { dato1, {a1,b1,c1,d1} }, { dato2, {a2,b2,c2,d2} },....}
Y con wBrowse lo puedo mostrar perfectamente de este modo:

Code: Select all

      @0,0 LISTBOX oLst ;
           FIELDS  Decrypt( ::aSesamoIni[oLst:nAt,1] )                       , ; // dato1...datonn
                   Decrypt( ::aSesamoIni[oLst:nAt,_SUBARR,IniVersion] )      , ; // a1...ann            // _SUBARR = 2
                   Decrypt( ::aSesamoIni[oLst:nAt,_SUBARR,IniUsuario] )      , ; // b1...bnn
                   Decrypt( ::aSesamoIni[oLst:nAt,_SUBARR,IniFeCtrl ] )      , ; // c1...cnn
           SIZE    380,100 ;
           SIZES   65,130,185,70,70,100,120 ;
           OF      ::oDlg

      oLst:SetArray( ::aSesamoIni )
 
sera posible con xBrowse?
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Multiarray en xBrowse

Post by nageswaragunupudi »

I am giving 4 methods. Choose any of the methods depending on the favorite programming style. All produce the same results.

Method 1 ( Syntax similar to TWBrowse, i.e., LISTBOX FIELDS command )
Method 2 ( Syntax similar to TCBrowse i.e., ADD TO oBrw command )
Method 3 ( Very old XBrowse syntax. Only way before XBrowse commands were available )
Method 4 ( New and recommended )

Method 4 works only with latest FWH.

Choose any method, programming with XBrowse is a lot more easier than other browses.

Code: Select all

#include "fivewin.ch"
#include "xbrowse.ch"

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

function Main()

   Method3()

return nil

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

function Method1   // Similar to WBrowse syntax

   local aData := { { "One",   { 1, 2, 3, 4 } }, ;
                    { "Two",   { 5, 6, 7, 8 } }, ;
                    { "Three", { 9, 8, 7, 6 } }  }

   local oDlg, oBrw

   DEFINE DIALOG oDlg SIZE 300,200 PIXEL

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS 1 ;
      FIELDS  { || oBrw:aRow[ 2 ][ 1 ] }, ;
              { || oBrw:aRow[ 2 ][ 2 ] }, ;
              { || oBrw:aRow[ 2 ][ 3 ] }, ;
              { || oBrw:aRow[ 2 ][ 4 ] }  ;
      HEADERS "Name", "A1", "A2", "A3", "A4" ;
      PICTURES nil, "999", "999", "999", "999" ;
      ARRAY aData CELL LINES NOBORDER

   oBrw:createFromCode()
   ACTIVATE DIALOG oDlg CENTERED

return nil

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

function Method2  // Similar to TCBrowse syntax

   local aData := { { "One",   { 1, 2, 3, 4 } }, ;
                    { "Two",   { 5, 6, 7, 8 } }, ;
                    { "Three", { 9, 8, 7, 6 } }  }

   local oDlg, oBrw

   method2()
   return nil

   DEFINE DIALOG oDlg SIZE 300,200 PIXEL

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS 1 HEADERS "Name" ;
      ARRAY aData CELL LINES NOBORDER

   ADD TO oBrw DATA oBrw:aRow[ 2 ][ 1 ] PICTURE "999" HEADER "A1"
   ADD TO oBrw DATA oBrw:aRow[ 2 ][ 2 ] PICTURE "999" HEADER "A2"
   ADD TO oBrw DATA oBrw:aRow[ 2 ][ 3 ] PICTURE "999" HEADER "A3"
   ADD TO oBrw DATA oBrw:aRow[ 2 ][ 4 ] PICTURE "999" HEADER "A4"

   oBrw:createFromCode()
   ACTIVATE DIALOG oDlg CENTERED

return nil

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

function Method3  // Old XBrowse syntax, when commands were not available

   local aData := { { "One",   { 1, 2, 3, 4 } }, ;
                    { "Two",   { 5, 6, 7, 8 } }, ;
                    { "Three", { 9, 8, 7, 6 } }  }

   local oDlg, oBrw, n

   DEFINE DIALOG oDlg SIZE 300,200 PIXEL

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS 1 HEADERS "Name" ;
      ARRAY aData CELL LINES NOBORDER

   for n := 1 to Len( aData[ 1 ][ 2 ] )
      WITH OBJECT oBrw:AddCol()
         :cHeader       := "A" + Str( n, 1 )
         :bEditValue    := SetColBlock( oBrw, n ) // Note: Please never use bStrData
         :cEditPicture  := "999"
      END
   next

   oBrw:createFromCode()
   ACTIVATE DIALOG oDlg CENTERED

return nil

static function SetColBlock( oBrw, nCol )
return { || oBrw:aRow[ 2 ][ nCol ] }

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

function Method4 // Present recommended but only with latest fwh

   local aData := { { "One",   { 1, 2, 3, 4 } }, ;
                    { "Two",   { 5, 6, 7, 8 } }, ;
                    { "Three", { 9, 8, 7, 6 } }  }

   local oDlg, oBrw

   // Works only with latest FWH

   DEFINE DIALOG oDlg SIZE 300,200 PIXEL

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS 1, { || oBrw:aRow[ 2 ][ 1 ] }, ;
                 { || oBrw:aRow[ 2 ][ 2 ] }, ;
                 { || oBrw:aRow[ 2 ][ 3 ] }, ;
                 { || oBrw:aRow[ 2 ][ 4 ] }  ;
      HEADERS "Name", "A1", "A2", "A3", "A4" ;
      PICTURES nil, "999", "999", "999", "999" ;
      ARRAY aData CELL LINES NOBORDER

   oBrw:createFromCode()
   ACTIVATE DIALOG oDlg CENTERED

return nil

//----------------------------------------------------------------------------//
 
Image
Regards

G. N. Rao.
Hyderabad, India
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse (SOLUCIONADO)

Post by MarioG »

huge Rao!, it was what needed

Regards
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Post Reply