Spanish Guardar datos de un listview

Mauricio Hamak

Member
Licensed User
Hola, tengo los datos cargados de un pedido en un listview, como puedo recorrer este mismo para guardarlo en SQL?
Saludos
 

josejad

Expert
Licensed User
Longtime User
Hola:

Nos das pocos datos, pero te podría valer algo como

B4X:
For i = 0 To ListView1.Size -1 
    Log(ListView1.GetItem(i))
    'Guarda aquí el valor en tu SQL
Next
 

josejad

Expert
Licensed User
Longtime User
Hola Mauricio:

Me alegro de que funcionase. Como te comenté, si das todos los datos desde el principio, y pones tu código, es más fácil ayudarte, ya que cómo tomar los valores de vuelta, depende de cómo hayas implementado el listview, si con una línea, con dos, si le has añadido una vista compleja. Depende de cada forma, se podrán obtener los datos de una forma u otra.

Lee el tutorial de ListView
https://www.b4x.com/android/forum/threads/listview-tutorial.6537/

Y haz pruebas con la parte que te marco en negrita:
Return value
The value of the clicked item is passed as a parameter.
Now, what is a value of an item???
By default this is the text stored in the first line.

However you can change it to any object you like by using:
AddSingleLine2, AddTwoLines2 and AddTwoLinesAndBitmap2 methods. These methods receive an additional parameter which is the return value. This allows you to pass more information as required by your application.

En definitiva, el listview por defecto pasa el texto almacenado en la primera línea. Tendrías que construirlo con los métodos AddSingleLine2, AddTwoLines2 and AddTwoLinesAndBitmap2, y trabajar con el valor que devuelven.

Haz pruebas, y con las dudas vemos cosas más concretas (ten en cuenta que yo también tendría que ponerme a probar).

saludos,
 

Mauricio Hamak

Member
Licensed User
Hola Jose te agradezco un monton tu ayuda, mira el tema es asi, yo cargo un listview productos de esta manera:

sql1.OpenConnection("jdbc:jtds:sqlserver://xx.ddns.net/xx;instance_name=SQLSERVER;user=sa;password=oveja10;")
' read columns
Dim res As MSSQLResultSet = sql1.ExecuteQuery("SELECT idProducto, Nombre 'Descripcion', PrecioContado FROM productos")
Do While res.MoveNext
lstProductos.AddTwoLines2(res.GetInt(1), res.GetString(2) & " $" & NumberFormat2(res.GetDouble(3), 0, 3, 2, True), res.GetInt(1) & "~" & res.GetString(2) & " $" & NumberFormat2(res.GetDouble(3), 0, 3, 2, True))
Loop

y despues mediante un click paso a otro grid con este metodo:
If Msgbox2("Agregar al pedido? " & CRLF & Value, "NOTICE", "Si", "", "No", Null) = DialogResponse.POSITIVE Then
If editCantidad.Text<>"" Then
L1 = L1.SubString2(0, L1.IndexOf("~"))
'L2 = L2.SubString2(L2.IndexOf("~")+1, L2.IndexOf("$"))
'L2 = L2.SubString2(0,L2.IndexOf("$"))
L2=L2.SubString(0)
subtotal= L2.SubString(L2.IndexOf("$")+1) * editCantidad.Text
total= total+subtotal
cantidad= cantidad+editCantidad.Text
lstPedido.AddTwoLines(L1, editCantidad.Text & " - " & L2) : newlist.Add(L1 & " - " & editCantidad.Text & " " & L2)
End If
End If

Y por ultimo tengo que guardar el listview pedidos y no se como utlizar la segunda linea que tengo otros datos necesarios para guardar,

Dim idProducto As Int
For i = 0 To lstPedido.Size -1
idProducto= lstPedido.GetItem(i)
'cantidad=segundalinea;
'preciouni=segundalinea;
'Log(aff)
'Guarda aquí el valor en tu SQL
Next

Ahi es donde me trabo donde dice segunda linea porque esos dos datos los tengo ahi, se podra extraer de alguna manera?
Saludos!
 

josejad

Expert
Licensed User
Longtime User
Hola:

Usa [ CODE] tu código [ /CODE] para que tu código sea más legible (sin espacios tras los corchetes)
Pues te diría que hagas igual que en el primer listview. En él usas el segundo parámetro (value)
B4X:
lstProductos.AddTwoLines2(res.GetInt(1), res.GetString(2) & " $" & NumberFormat2(res.GetDouble(3), 0, 3, 2, True), res.GetInt(1) & "~" & res.GetString(2) & " $" & NumberFormat2(res.GetDouble(3), 0, 3, 2, True))

En este caso: res.GetInt(1) & "~" & res.GetString(2) & " $" & NumberFormat2(res.GetDouble(3), 0, 3, 2, True) para pasar información a L1
Por tanto, en lstPedido, en vez de usar AddTwoLines, usa de nuevo AddTwoLines2 y pasa como parámetro lo que quieras.
Si te fijas en la ayuda que se muestra cuando estás tecleando
Captura.JPG


GetItem devuelve value (el segundo parámetro de AddTwoLines2) y si no hay uno, el valor de la primera línea (que es lo que devolvía en el primer ejemplo)

Es decir, el mismo ejemplo de arriba, sería así para mostrar la segunda línea

B4X:
    Activity.LoadLayout("1")
    For i = 0 To 10
        ListView1.AddTwoLines2("Linea 1."&i, "Linea 2."&i, "Linea 1."&i&  " ~Linea 2." &i)
    Next
    For i = 0 To ListView1.Size -1
        Log(ListView1.GetItem(i))
    Next

El log sería:
B4X:
Linea 1.0 ~Linea 2.0
...
...
 

josejad

Expert
Licensed User
Longtime User
Hola jmrodriguezr12, bienvenido al foro.

Deberías abrir un nuevo hilo para tu consulta, con un título descriptivo.

dond e se guardaria ese txt de el listview en el telefono
No sé a qué te refieres, el compañero lo guardaba en una base de datos, no en un .txt

Si quieres guardar algo, puedes usar los métodos de "File", consúltalos, por ejemplo:

B4X:
su.SaveCSV2(File.DirInternal, "1.csv", ",", data, Array("Column 1", "Column 2", "Column 3"))

Si haces un Log(File.DirInternal) te dirá dónde los has guardado.
Te recomiendo que eches un vistazo al tutorial:

en especial a la parte:
READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE

saludos,
 
Top