Discussion:
Problema con ListBox
(demasiado antiguo para responder)
integral
2009-12-04 17:49:43 UTC
Permalink
Que tal Amigos :

Estoy trabajando con 2 controles ListBox, el primero de ellos de
nombre LstMulti toma los datos de una Tabla y ademas tiene activada la
opcion Multiselect hasta aqui todo funciona correctamente.

El problema surge cuando deseo que aparezca en el 2do. ListBox llamado
List2 aquellos items que fueron seleccionados del primer ListBox

Aqui les muestro el codigo que tengo puesto en el evento DobleClic del
primer ListBox.

FOR i = 1 TO ThisForm.LstMulti.ListCount
IF ThisForm.lstMulti.Selected(i)
ThisForm.List2.Value = ThisForm.lstMulti.List(i)
ENDIF
NEXT

Espero sus comentarios y/o sugerencias.

atte.,

Gabriel
foxteban
2009-12-08 18:48:44 UTC
Permalink
Hola Gabriel

Creo entender que lo que tu quieres es formar con dos ListBox el paso
de la informacion de una tabla a la otra y que el item seleccionado,
desaparesca de una tabla y se registre en la otra. Es como vi an
varias aplicaciones e donde tu elijes desde un listbox, que campos
deseas incluir para un determinado reporte, con los comando de paso de
uno por uno o todos.
Bueno, he creado un formulario en la cual creo a traves de cursores
dos tablas que las llamos de la siguiente forma:
En el opentable del Entorno de datos pongo lo siguiente:
***********************************************************************************
SELECT 0
CREATE CURSOR tbl1 (concepto c(10))

FOR a=1 TO 10
INSERT INTO tbl1 (concepto) VALUES ('dato'+PADL(a,2,'0'))
ENDFOR


SELECT 0
CREATE CURSOR tbl2 (concepto c(10))

Dos ListBox que le llamo por defecto List1 y List2
Un commandgroup1 vertical colocado en el medio de ambos Listbox
En el command1 como caption pongo un ">"
En el command2 como caption pongo un ">>"
En el command3 como caption pongo un "<"
En el command4 como caption pongo un "<<"

En el command1 pongo la siguiente rutina
SELECT tbl2
INSERT INTO tbl2 (concepto) VALUES (tbl1.concepto)

SELECT tbl1
DELETE

thisform.list1.Requery
thisform.list2.Requery
*****************************************************************
En el command2 pongo la siguiente rutina

select tbl1
scan
insert into tbl2 (concepto) values (tbl1.concepto)
endscan

select tbl1
delete all

thisform.list1.requery
thisform.list2.requery

*****************************************************************
En el command3 pongo la siguiente rutina

SELECT tbl1
INSERT INTO tbl1 (concepto) VALUES (tbl2.concepto)

SELECT tbl2
DELETE

thisform.list1.Requery
thisform.list2.Requery

*****************************************************************
En el command4 pongo la siguiente rutina

select tbl2
scan
insert into tbl1 (concepto) values (tbl2.concepto)
endscan

select tbl2
delete all

thisform.list1.requery
thisform.list2.requery

En el evento Click del List1 pongo
thisform.commandgroup1.command1.Enabled=.t.
thisform.commandgroup1.command2.Enabled=.t.
thisform.commandgroup1.command3.Enabled=.f.
thisform.commandgroup1.command4.Enabled=.f.

En el evento Click del List2 pongo
thisform.commandgroup1.command1.Enabled=.f.
thisform.commandgroup1.command2.Enabled=.f.
thisform.commandgroup1.command3.Enabled=.t.
thisform.commandgroup1.command4.Enabled=.t.

En el Inti del form pongo

thisform.commandgroup1.command1.Enabled=.t.
thisform.commandgroup1.command2.Enabled=.t.
thisform.commandgroup1.command3.Enabled=.f.
thisform.commandgroup1.command4.Enabled=.f.
***********************************************************
Bueno Gabriel, si esto es lo que tu precisas, creo que te viene de 10,
y si no, por lo menos tenes una idea para lo que necesita hacer.
Espero te ayude a resolver tu inquietud.
Un abrazo
Esteban Micossi
Chicles LM
2010-12-30 21:52:19 UTC
Permalink
Que tal vi tu informacion en el post...

Te consulto sobre otra problematica con listBox.RemoveItem() en FoxPro 6.

Tengo un ListBox (de 4 columnas), al cual voy llenando con informaci?n de un cuadro de texto (ControlSource = None, RowSource =None).

Elimino cualquier item del list con RemoveItem(i), hasta aqui todo correcto.

El problema es cuando trato de guardar esa informaci?n ahora si en una tabla (utilizo el sig c?digo):

WITH thisform.List1
FOR i = 1 to .ListCount
APPEND BLANK
REPLACE cve_producto WITH VAL(.ListItem(i,1))
REPLACE cantidad_prod WITH VAL(.ListItem(i,3))
REPLACE total_p WITH VAL(.ListItem(i,5))
REPLACE folio_vta with m.folio_vta
NEXT
ENDWITH

En ocasiones foxpro inserta valores de: " " ? '0', para ciertos valores del ListBox, siendo que previamente hice un RemoveITem, y visualmente el ListBox solo muestra los registros "validos".

Revis? por debug el c?digo, pero no detecto a qu? se deba que se hace esa inserci?n de ceros '0', ya que no siempre se presenta.. sabes si hay qu? hacer alguna otra antes, ya intent? haciendo un refresh() a ListBox.

Cabe mencionar, que la inserci?n a la tabla se realiza correctamente si no hice algun RemoveItem sobre el Control listBox.
Post by integral
Estoy trabajando con 2 controles ListBox, el primero de ellos de
nombre LstMulti toma los datos de una Tabla y ademas tiene activada la
opcion Multiselect hasta aqui todo funciona correctamente.
El problema surge cuando deseo que aparezca en el 2do. ListBox llamado
List2 aquellos items que fueron seleccionados del primer ListBox
Aqui les muestro el codigo que tengo puesto en el evento DobleClic del
primer ListBox.
FOR i = 1 TO ThisForm.LstMulti.ListCount
IF ThisForm.lstMulti.Selected(i)
ThisForm.List2.Value = ThisForm.lstMulti.List(i)
ENDIF
NEXT
Espero sus comentarios y/o sugerencias.
atte.,
Gabriel
Post by foxteban
Hola Gabriel
Creo entender que lo que tu quieres es formar con dos ListBox el paso
de la informacion de una tabla a la otra y que el item seleccionado,
desaparesca de una tabla y se registre en la otra. Es como vi an
varias aplicaciones e donde tu elijes desde un listbox, que campos
deseas incluir para un determinado reporte, con los comando de paso de
uno por uno o todos.
Bueno, he creado un formulario en la cual creo a traves de cursores
***********************************************************************************
SELECT 0
CREATE CURSOR tbl1 (concepto c(10))
FOR a=1 TO 10
INSERT INTO tbl1 (concepto) VALUES ('dato'+PADL(a,2,'0'))
ENDFOR
SELECT 0
CREATE CURSOR tbl2 (concepto c(10))
Dos ListBox que le llamo por defecto List1 y List2
Un commandgroup1 vertical colocado en el medio de ambos Listbox
En el command1 como caption pongo un ">"
En el command2 como caption pongo un ">>"
En el command3 como caption pongo un "<"
En el command4 como caption pongo un "<<"
En el command1 pongo la siguiente rutina
SELECT tbl2
INSERT INTO tbl2 (concepto) VALUES (tbl1.concepto)
SELECT tbl1
DELETE
thisform.list1.Requery
thisform.list2.Requery
*****************************************************************
En el command2 pongo la siguiente rutina
select tbl1
scan
insert into tbl2 (concepto) values (tbl1.concepto)
endscan
select tbl1
delete all
thisform.list1.requery
thisform.list2.requery
*****************************************************************
En el command3 pongo la siguiente rutina
SELECT tbl1
INSERT INTO tbl1 (concepto) VALUES (tbl2.concepto)
SELECT tbl2
DELETE
thisform.list1.Requery
thisform.list2.Requery
*****************************************************************
En el command4 pongo la siguiente rutina
select tbl2
scan
insert into tbl1 (concepto) values (tbl2.concepto)
endscan
select tbl2
delete all
thisform.list1.requery
thisform.list2.requery
En el evento Click del List1 pongo
thisform.commandgroup1.command1.Enabled=.t.
thisform.commandgroup1.command2.Enabled=.t.
thisform.commandgroup1.command3.Enabled=.f.
thisform.commandgroup1.command4.Enabled=.f.
En el evento Click del List2 pongo
thisform.commandgroup1.command1.Enabled=.f.
thisform.commandgroup1.command2.Enabled=.f.
thisform.commandgroup1.command3.Enabled=.t.
thisform.commandgroup1.command4.Enabled=.t.
En el Inti del form pongo
thisform.commandgroup1.command1.Enabled=.t.
thisform.commandgroup1.command2.Enabled=.t.
thisform.commandgroup1.command3.Enabled=.f.
thisform.commandgroup1.command4.Enabled=.f.
***********************************************************
Bueno Gabriel, si esto es lo que tu precisas, creo que te viene de 10,
y si no, por lo menos tenes una idea para lo que necesita hacer.
Post by ***@ack
hola que tal, segun entiendo lo que deseas hacer no tendrias que usar la
propiedad Value, sino el metodo AddItem osea
FOR i = 1 TO ThisForm.LstMulti.ListCount
IF ThisForm.lstMulti.Selected(i)
ThisForm.List2.AddItem(ThisForm.lstMulti.List(i))
ENDIF
NEXT
Saludos,
Submitted via EggHeadCafe
Microsoft SQL Server DBA For Beginners
http://www.eggheadcafe.com/training-topic-area/SQL-Server-DBA/6/SQL-Server-DBA.aspx
thej@ack
2009-12-09 15:25:01 UTC
Permalink
hola que tal, segun entiendo lo que deseas hacer no tendrias que usar la
propiedad Value, sino el metodo AddItem osea
FOR i = 1 TO ThisForm.LstMulti.ListCount
IF ThisForm.lstMulti.Selected(i)
ThisForm.List2.AddItem(ThisForm.lstMulti.List(i))
ENDIF
NEXT

Saludos,
Post by integral
Estoy trabajando con 2 controles ListBox, el primero de ellos de
nombre LstMulti toma los datos de una Tabla y ademas tiene activada la
opcion Multiselect hasta aqui todo funciona correctamente.
El problema surge cuando deseo que aparezca en el 2do. ListBox llamado
List2 aquellos items que fueron seleccionados del primer ListBox
Aqui les muestro el codigo que tengo puesto en el evento DobleClic del
primer ListBox.
FOR i = 1 TO ThisForm.LstMulti.ListCount
IF ThisForm.lstMulti.Selected(i)
ThisForm.List2.Value = ThisForm.lstMulti.List(i)
ENDIF
NEXT
Espero sus comentarios y/o sugerencias.
atte.,
Gabriel
.
Loading...