Italian Scorrere view in un panel

Stefano Bordini

Member
Licensed User
Longtime User
Ciao ragazzi sto cercando di scorrere tutte le edttext che ho in un panel per poter estrarre il valore del tag ed il testo, lo faccio con il seguente codice

B4X:
For Each v As View In pnltime.GetAllViewsRecursive
    Dim cmd As DBCommand
    cmd.Initialize
    cmd.Name="insert_events"
    v.Color=Colors.Red
    cmd.Parameters=Array As Object(orario,edttempo.Text,firstexecutions,v.tag)
    reqmanager.ExecuteCommand(cmd,"insert")   
 Next
il valore v.tag è quello corretto che il codice assegna alla view,ma non riesco ad estrarre il valore text,mi da soltanto l'ultimo della lista.
Ho messo come marcatore v.color=colors.red per verificare che tutte le edit venissero scorse, e cosi è,ad ogni ciclo mi colora quella successiva,ma non mi restituisce il giusto valore del testo.
 

Stefano Bordini

Member
Licensed User
Longtime User
Risolto cosi non mi sembra il modo più elegante ma funziona, e tanto è.
B4X:
For i = 0 To Activity.NumberOfViews - 1
      Dim lbl As Label
      If Activity.GetView(i) Is Label Then
         lbl = Activity.GetView(i)
         Log(lbl.Text)
      End If
   Next
PS codice postato da Erel nel forum non è farina del mio sacco :(
 

LucaMs

Expert
Licensed User
Longtime User
Scusa ma non è chiarissimo cosa devi fare, cosa devi passare come parametro per la query (immagino il Text di una o probabilmente più EditText) etc.

Cosa contiene pnlTime? Solo una serie di EditText di cui passare ogni valore (Text) ad una nuova query di inserimento?

Va beh, dato che non ho capito, provo a darti un consiglio generale; vorrà dire che se non ti sarà utile in questo caso, ti sarà utile in altri :)

E' utile avere un oggetto di tipo Map contenente un gruppo di View; dato che una Map è composta da coppie chiave/valore, e che per questi due puoi usare qualunque tipo di dato, potresti avere, ad esempio, una mapTime contenente coppie "NomeView"-View e quindi ricavare la View tramite il nome:
Dim et As EditText = mapTime.Get("NomeDellaView")
(benché io non capisca come mai tu conosci il nome di edttempo e non quello per l'ultimo parametro della query. E poi, perché passi il Tag alla query e poi ti serve conoscere invece il Text?).

Prova a vedere se ti può essere utile anche questo thread, dato che stai usando un DB (magari è un po' fuori argomento e piuttosto teorico, ma utile).
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
Ma scusa, nel primo codice che hai postato fai una cosa, nel secondo (che dici funziona) ne fai un altro, è normale quindi che i due codici non si comportino nello stesso modo.

Nel secondo codice estrai la proprietà Text dalla label che stai "ciclando" con l'istruzione lbl.Text, però nel primo codice non estrai il Text della label che stai ciclando, estrai sempre il solito Text dalla label edttempo (con l'istruzione edttempo.Text).

Non sarà questa la svista ??
Forse dovevi usare v.Text

Sergio
 

udg

Expert
Licensed User
Longtime User
Se comprendo bene, basta mixare il codice dei post #1 e #2:
B4X:
ForEach v AsView In pnltime.GetAllViewsRecursive 
  v.Color=Colors.Red
  If v IsLabelThen
    Dim lbl AsLabel = v
    Dim cmd As DBCommand
    cmd.Initialize
    cmd.Name="insert_events"
    cmd.Parameters=ArrayAs Object(orario,v.Text,firstexecutions,v.tag)
    reqmanager.ExecuteCommand(cmd,"insert") 
  end if
Next

udg
 

Stefano Bordini

Member
Licensed User
Longtime User
Scusa ma non è chiarissimo cosa devi fare, cosa devi passare come parametro per la query (immagino il Text di una o probabilmente più EditText) etc.

Cosa contiene pnlTime? Solo una serie di EditText di cui passare ogni valore (Text) ad una nuova query di inserimento?

Cerco di spiegarmi meglio,mi reste sempre difficile farlo,io leggo da una tabella una serie di dati identificati da un id,poi assegno questo id come tag alle view che creo,nel pnltime ho solo una serie di EditText,una volta modificato il testo della EdiText inserisco i dati modificati in una seconda tabella associandoli al id che leggo dal tag,sicuramente usare una Map è più corretto/performante ma i dati che leggerò non saranno mai molti, essendo i settori di un impianto di irrigazione.

Nel secondo codice estrai la proprietà Text dalla label che stai "ciclando" con l'istruzione lbl.Text, però nel primo codice non estrai il Text della label che stai ciclando, estrai sempre il solito Text dalla label edttempo (con l'istruzione edttempo.Text).
edttempo è una della view che creo dalla prima query, ma non mi viene ciclata mi restituisce sempre il valore dell'ultima creata
La Proprietà V.Text non la posso usare mi da errore "unknown member Text".

inserisco il codice funzionante cosi spero di esser più chiaro
B4X:
Sub btninserisci_Click
Dim i As Int = 0
Dim liters As EditText 'il valore della edttempo
For Each v As View In pnltime.GetAllViewsRecursive
   liters=pnltime.GetView(i)
    Log(liters.Text)

    Dim cmd As DBCommand
    cmd.Initialize
    cmd.Name="insert_events"
    v.Color=Colors.Red
    cmd.Parameters=Array As Object(orario,liters.Text,firstexecutions,v.tag)
    reqmanager.ExecuteCommand(cmd,"insert")

i=i+1
 
Next
   
End Sub
Spero di esser andato meglio
 

LucaMs

Expert
Licensed User
Longtime User
Meglio? Abbastanza; l'unico problema, adesso, è capire se il codice ti funziona o no :D

Se ottieni questo errore:
La Proprietà V.Text non la posso usare mi da errore "unknown member Text".
è perché V, in quell'istante, non è una EditText o una Label (o una qualunque altra possibile view che abbia la proprietà Text; infatti il messaggio ti dice "Text è un membro sconosciuto", ovvero non è un membro [proprietà, in questo caso] di V).



[e un grosso saluto a @udg e @sirjo66, che almeno mi fanno capire che il forum è ancora vivo :)]
 
Last edited:

LordZenzo

Well-Known Member
Licensed User
Longtime User
For Each v As View In pnltime.GetAllViewsRecursive
Dim cmd As DBCommand
cmd.Initialize
cmd.Name=
"insert_events"
v.Color=Colors.Red
cmd.Parameters=
Array As Object(orario,edttempo.Text,firstexecutions,v.tag)
reqmanager.ExecuteCommand(cmd,
"insert")
Next

per ordine, se vuoi ciclare le label devi ciclare le label non le View
usando View cicli tutto il visibile, label panel ed altro
percui alla prima riga
da
For Each v As View In pnltime.GetAllViewsRecursive
a
For Each v As Label In pnltime.GetAllViewsRecursive

e devi prendere i valori da v

da
cmd.Parameters=ArrayAs Object(orario,edttempo.Text,firstexecutions,v.tag)
a
cmd.Parameters=ArrayAs Object(orario,v.Text,firstexecutions,v.tag)

prova e dimmi se va bene
 

Stefano Bordini

Member
Licensed User
Longtime User
per ordine, se vuoi ciclare le label devi ciclare le label non le View
usando View cicli tutto il visibile, label panel ed altro
percui alla prima riga
da
For Each v As View In pnltime.GetAllViewsRecursive
a
For Each v As Label In pnltime.GetAllViewsRecursive

e devi prendere i valori da v

da
cmd.Parameters=ArrayAs Object(orario,edttempo.Text,firstexecutions,v.tag)
a
cmd.Parameters=ArrayAs Object(orario,v.Text,firstexecutions,v.tag)

prova e dimmi se va bene
Funziona cosi semplice che mi prenderei a schiaffi
Ps per la cronaca funzionava anche nella mia versione ma cosi molto più leggibile
 

sirjo66

Well-Known Member
Licensed User
Longtime User
..... e poi sinceramente non sono intervenuto sul thread di quanto si guadagna con una app per non demoralizzarti ancora di più
 
Top