Spanish leer el tag de un listview

Ecoleo

Member
Licensed User
Longtime User
Un nuevo problema.
Utilizo un listview al que le voy añadiendo lineas ( se va confeccionando un pedido) , cuando añado la linea , tambien guardo un valor en el tag ; como hago para , una vez se ha terminado el pedido, necesito leer el valor del tag del listview de principio a fin , para crear un archivo de texto y poder imprimirlo.

añado linea al listview:
B4X:
 listpedido.AddSingleLine2(NombreFamilia.SubString2(0,6)& "/" & nombreArticulo & " -  " & Cantidad & "-->" & Importe,Importe)
 listpedido.Tag=NombreFamilia.SubString2(0,6)& "/" & nombreArticulo & " -  " & Cantidad & "-->" & Importe

leo el pedido:
B4X:
Dim i As Int   
   For i=0 To listpedido.Size -1
      ped=ped & listpedido.Tag & CRLF
   Next

pero sólo me lee el tag de la ultima linea del listview.
Alguna sugerencia ?:sign0163:
 

Ecoleo

Member
Licensed User
Longtime User
No hay ninguna manera de leer el listview de principio a fin , una vez que ya esté terminado el pedido ?. Sin usar previamente el tag.
Yo sólo necesito el contenido de cada linea para crear un archivo de texto y poder imprimirlo.
La opcion de ir llenando un array cuando voy añadiendo lineas seria perfecta, pero como hago si el usuario decide eliminar una linea del pedido ?
Como surgió esta problematica, decidi ir cargando en el "value" de cada linea el importe del articulo, para asi tener calculado en todo momento el valor del pedido y si el usuario decide eliminar una linea, pues me la cargo del listview y puedo actualizar el importe del pedido sin problemas; pero si tuviera un array , como podria saber que posicion eliminar del array?
Me parece que esta forma de ir llenando un pedido no es la más adecuada, voy a tener que buscar otra solución. Como añoro el control de vbasic6 "MSFLEXGRID".
Saludos
 

NJDude

Expert
Licensed User
Longtime User
Si puedes leer el ListView completo usando "ResultsList.GetItem(index)" algo asi:
B4X:
Dim DataLine As String
DataLine = ResultsList.GetItem(index)

Y luego extraer usando "SubString" lo que necesites si es aplicable.

Para borrar una linea usas esto:
B4X:
ResultsList.RemoveAt(index)

Espero eso te de una idea.
 

Ecoleo

Member
Licensed User
Longtime User
Esa solución , ya la había probado y lo que leo es el valor que tiene cada linea en "value", y lo que a mi me interesa es el texto del listview; el value lo necesito para recalcular el pedido si el usuario llega a eliminar alguna linea del listview. Si en el momento de cargar el list NO le paso este parametro, entonces si que leo el texto de cada linea; pero para solucionar una cosa se me complica otra. Lo tipico en programación.. que te voy a contar...
Yo necesito pasar 2 parametros al cargar el list , uno el importe y otro el texto, por eso habia pensado en usar el tag, pero no soy capaz de manejarlo.
Estoy buscando otra solución para resolver esto,a ver que se me ocurre..
Un saludo y gracias por tu rapidez.:)
 

joseluis

Active Member
Licensed User
Longtime User
Sólo lo he visto por encima, pero me parece que estás sobreescribiendo el tag del listview de forma que lógicamente sólo se guarda la última escritura.

En cada línea nueva que añadas deberías conservar el valor anterior del Tag así:
listpedido.Tag = listpedido.Tag & CRLF & NombreFamilia.SubString2(0,6)& "/" & nombreArticulo & " - " & Cantidad & "-->" & Importe

Además, en tag puedes guardar cualquier tipo de objeto. Tag puede ser una lista, o un buildstring, o un tipo propio. A lo mejor te simplifica la operación.
 

Ecoleo

Member
Licensed User
Longtime User
Tu solucion es buena y funciona, siempre y cuando el usuario NO se le ocurra borrar una linea del list; porque en ese caso yo elimino la linea , pero ¿ como le quito al tag el valor correspondiente a la linea que se acaba de eliminar?, yo creo que no puedo, porque lo único que se en el momento del click del usuario encima de la linea es el valor que de me devuelve el "value" de la linea seleccionada, y con ese "value" , no soy capar de ir al tag y quitar el contenido que necesito.
Yo creo que estoy dando contra una pared usando el listview para esto.:BangHead:
A ver si me puedes sugerir otra solucion.Yo lo que quiero es que el usuario vaya seleccionando articulos para hacer un pedido y igual que los añade, los pueda eliminar; y cuando decida, pueda imprimir ó mandar el pedido por mail.
Si no encuentro una solución simple, tendré que empezar a pensar en usar una tabla temporal y añadir, eliminar registros, etc...
Gracias:)
 

joseluis

Active Member
Licensed User
Longtime User
Yo no he usado prácticamente ListViews. Me gusta usar ScrollViews donde controlo todo, y cada elemento que pongo es un panel con su propio tag...

Pero al caso, he estado viendo en el wiki de Listview, que tienes los eventos ItemClick e ItemLongClick que devuelven el índice, junto con el valor. Con eso tienes todo lo necesario.

Así que yo creo que lo más fácil es que tengas una lista donde vayas guardando las líneas, en el mismo orden que en ListView con el método:

Lista.Add(Valor)

Y cuando el usuario quite una línea del listview, la quitas de la lista con:

Lista.RemoveAt(Posición)
 

Ecoleo

Member
Licensed User
Longtime User
¡¡ Por fín ¡¡

Gracias JoseLuis, :icon_clap: , segui tu consejo, y ya funciona como yo pretendia.
Solucionado,
Gracias,gracias,gracias......:icon_clap:
 

jjoelrojas

Member
NJDude, muchisimas gracias, por esa linea de codigo para listview, asi quedo la suma de los valores de la lista

Sub Calculando_Total_Factura
Dim valor As Double
Dim final,j As Int
Totales=0
final=ListViewDescripcion.Size
For j=1 To final-1
valor =ListViewTotal.GetItem(j)
Totales = Totales + valor
Next
EditTexttotal.Text=Totales
End Sub
Si puedes leer el ListView completo usando "ResultsList.GetItem(index)" algo asi:
B4X:
Dim DataLine As String
DataLine = ResultsList.GetItem(index)

Y luego extraer usando "SubString" lo que necesites si es aplicable.

Para borrar una linea usas esto:
B4X:
ResultsList.RemoveAt(index)

Espero eso te de una idea.
 

mateorh01

New Member
¡¡ Por fín ¡¡

Gracias JoseLuis, :icon_clap: , segui tu consejo, y ya funciona como yo pretendia.
Solucionado,
Gracias,gracias,gracias......:icon_clap:
Hola estaba leyendo el foro y aunque es un tema bastante viejo quería saber si de pronto tenes el código del listview ya que intento hacer algo parecido y no consigo encontrar mucha información que me sirva
 
Top