Asignar campos a LISTBOX

Asignar campos a LISTBOX

Postby triumvirato » Sat Aug 28, 2010 10:54 am

Seguro es de cajón, pero no encuentro una manera práctica de asiganar los campos de una Base de datos a un LISTBOX, tengo el sigueinte código por ejemplo:

Code: Select all  Expand view
  REDEFINE LISTBOX oBrwBusCli;
            FIELDS Cli->Cli_Cod, Cli->Cli_Nom, Cli->Cli_Tel, Cli->Cli_Te2, Cli->Cli_Dir, Cli->Cli_Pob;
            ID 1000 OF oDlgBusCli ALIAS "Cli"
 


y busco poder hacer algo como esto:

Code: Select all  Expand view
  REDEFINE LISTBOX oBrwBusCli;
            FIELDS aFldDb; //Array, queda el crear una expresión en una variable por ejemplo &cFldDb
            ID 1000 OF oDlgBusCli ALIAS "Cli"
 


He echado un ojo a la clase Listbox.prg, pero no encuentro una manera práctica de hacerlo.
Seguramente sea algo fácil o trivial, pero no he encontrado nada similar por el foro.


Gracias y Saludos!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: Asignar campos a LISTBOX

Postby Daniel Garcia-Gil » Sat Aug 28, 2010 11:16 am

Triumvirato

De esa forma no lo podras hacer, el comando crea un codeblock (no un array ) con los "fields" a mostrar intentalo de esta forma:

Code: Select all  Expand view
aFldDb = { Cli->Cli_Cod, Cli->Cli_Nom, Cli->Cli_Tel, Cli->Cli_Te2, Cli->Cli_Dir, Cli->Cli_Pob }


Code: Select all  Expand view
 
  REDEFINE LISTBOX oBrwBusCli;
            FIELDS NIL; //Array, queda el crear una expresión en una variable por ejemplo &cFldDb
            ID 1000 OF oDlgBusCli ALIAS "Cli"
 
  oBrwBusCli:bLine = {|| aFldDb }
 


o de esta otra forma

Code: Select all  Expand view
oBrwBusCli = TWBrowse():Redefine( 1000, {|| aFldDb }, oDlgBusCli,,,,,,,,,,,,,,,"Cli" )
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Asignar campos a LISTBOX

Postby Willi Quintana » Sat Aug 28, 2010 12:47 pm

Te faltan asignar tamaños de columna:
Code: Select all  Expand view


 REDEFINE LISTBOX oBrwBusCli;
            FIELDS Cli->Cli_Cod, Cli->Cli_Nom, Cli->Cli_Tel, Cli->Cli_Te2, Cli->Cli_Dir, Cli->Cli_Pob;
            HEADERS "Campo1", "Campo2", "Campo3",  "Campo4", "Campo5", "Campo6" ;
            SIZES 80,80,80,80,80,80 ;            
            ID 1000 OF oDlgBusCli

 
User avatar
Willi Quintana
 
Posts: 1010
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Asignar campos a LISTBOX

Postby triumvirato » Mon Aug 30, 2010 6:02 am

Daniel,

Al hacerlo de cualquiera de los dos modos que propones, el Browse toma un registro de la base de datos aleatorio y lo repite en todos los registros del Browse...

Muchas gracias por tu ayuda.



Willi,

Cierto, me faltaban esas definiciones en mi código, pero en este caso las omití a propósito para simplificar al máximo posible mi ejemplo, siempre procuro hacerlo para que las respuestas de quien me ayuda puedan ser más concisas y sobre todo, no haceros perder mucho el tiempo leyendo mi código a aquellos que como tú me ayudáis. De ahí que intente siempre simplificar al máximo.
Por cierto, tu hijo ya va a hacer dos años? como crecen estos "enanos", parece que fué ayer, verdad?.
Muchísimas gracias por tu apunte, Willi.

Saludos!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: Asignar campos a LISTBOX

Postby triumvirato » Wed Sep 01, 2010 10:33 am

Daniel,

Al final lo he resuelto así, a falta de criterio solución mejor:


Code: Select all  Expand view

aFldBrw := { "Cli_Cod", "Cli_Nom", "Cli_Tel", "Cli_Te2", "Cli_Dir", "Cli_Pob" }
cAlias := "Cli"

......


cFldBrw := ""
   for nVarFor = 1 to Len( aFldBrw )
       cFldBrw += cAlias + "->" + aFldBrw[ nVarFor ] + ", "
   next
   cFldBrw := SubStr( cFldBrw, 1, Len( cFldBrw ) - 2 )

  REDEFINE LISTBOX oBrwBusCli;
            FIELDS &cFldBrw;
            ID 1000 OF oDlgBusCli ALIAS "Cli"
 
 


Saludos.
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 18 guests