Multiarray en xBrowse

Multiarray en xBrowse

Postby MarioG » Mon Jul 18, 2011 2:57 pm

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
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Postby pablovidal » Mon Jul 18, 2011 3:49 pm

Code: Select all  Expand view

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
pablovidal
 
Posts: 401
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana

Re: Multiarray en xBrowse

Postby MarioG » Mon Jul 18, 2011 4:56 pm

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  Expand view
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
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Postby Daniel Garcia-Gil » Mon Jul 18, 2011 5:07 pm

Hola

Mario, cual es el error que te genera?

intenta de esta forma

Code: Select all  Expand view
WITH OBJECT oLst:AddCol()
      :cHeader:= "Columna1"
      :nArrayCol := 1  // aqui vas seleccionando las "columnas" del array
END


en ste caso no te haria falta bStrData
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Multiarray en xBrowse

Postby MarioG » Tue Jul 19, 2011 12:01 am

Daniel;
gracias por responder
Si uso, segun tu sugerencia;
Code: Select all  Expand view
  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: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Postby MarioG » Tue Jul 19, 2011 12:15 am

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  Expand view
  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
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Postby Raymundo Islas M. » Tue Jul 19, 2011 1:18 pm

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  Expand view
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
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Multiarray en xBrowse

Postby MarioG » Tue Jul 19, 2011 8:46 pm

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  Expand view

      @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
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Multiarray en xBrowse

Postby nageswaragunupudi » Wed Jul 20, 2011 4:03 am

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  Expand view
#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
nageswaragunupudi
 
Posts: 10308
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Multiarray en xBrowse (SOLUCIONADO)

Postby MarioG » Wed Jul 20, 2011 11:20 pm

huge Rao!, it was what needed

Regards
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 43 guests