Italian Menu grafico

udg

Expert
Licensed User
Longtime User
La relazione 1-1 era tra la parte di record "standard" e quella "variabile".
In pratica, nella parte standard gestisco campi come ID, data, etc, mentre in quella variabile, grazie ad un codice che identifica il tipo di dato variabile, inserisco informazioni che sono specifiche per quel tipo dati.
In questo modo avrò che il record con ID = 56 potrà avere nella parte variabile tipo=1 e poi dati che si riferiscono ad una persona (es. nome, cognome, telefono) mentre il record con ID=57 potrà avere nella sua parte variabile tipo=2 e riferirsi a dati tipici di una stanza (piano, numero, esposizione..).

La mia idea sarebbe quella di avere nell'app una Map costruita sui valori dei vari editbox e controlli della UI, usare il B4XSerializator per convertire la Map in una sequenza di byte e memorizzare tale array di byte nel BLOB. Processo inverso per la lettura.

L'alternativa è memorizzare il contenuto dei vari campi raccolti nella Map in corrispondenti campi di una tabella dedicata a quel tipo (DatiPersona, DatiStanza..) e poi andare di JOIN tra la tabella principale (quella dei dati "standard") e quella ricavata dal tipo che specifica appunto il tipo di dati variabili.
Nell'esempio di prima, per il record 56 farei la JOIN con la tabella DatiPersona mentre per il record 57 dovrei farlo con DatiStanza.
In un caso e nell'altro, la risposta sarà sempre un record solo, a causa della relazione 1-1 di cui dicevo all'inizio.
 

LucaMs

Expert
Licensed User
Longtime User
Difficile, almeno per me, capire bene; resta la premessa che le conversioni da map a byte e viceversa sicuramente impiegano parecchio tempo.

Cosa intendi con "parte standard"? Fammi un disegnino, che non ti capisco :D.

Ci sono motivi particolari per non usare gli usuali "metodi"? Tabelle in JOIN (ma volendo anche senza JOIN).

Perché non avere una tabella Cliente, con tutti i suoi dati anagrafici, una tabella Stanza, con i dati relativi (piano, numero, esposizione), una tabella di relazione ClienteStanza che, olltre a contenere gli ID delle due entità precedenti, abbia magari altri dati, come DataPrenotazione, DataOccupazione, etc.
O roba simile; insomma, modo classico (e pulito).
 

udg

Expert
Licensed User
Longtime User
Il modo classico era descritto nella soluzione #2.
Quello che sto preparando è un sistema di agende. Ho un nucleo principale che sostanzialmente gestisce gli slot temporali. Per associare ad uno slot occupato le informazioni pertinenti a quel tipo di agenda ho pensato ai due sistemi di cui avevo scritto nel post originale.
In sostanza, se l'agenda si riferisce all'agenda professionale di un medico, allora le informazioni da memorizzare potrebbero essere il nome del paziente, il tipo di esame da condurre etc. Se invece si riferiscono ad stanza, potrebbero essere l'elenco di chi occuperà la stanza, un flag per indicare se necessaria la presenza di un interprete, di un videoproiettore etc.

Ogni "tipo" (medico, stanza..) avrebbe la sua app dedicata e quindi gestirebbe in modo opportuno le informazioni specifiche per quel tipo. Poi però tutti i dati andrebbero in un DB unico. Non è strettamente necessario avere tante app. Potrebbe essercene anche qualcuna in grado di gestire più tipologie di dati; in fondo si tratterebbe di avere più Activity, ognuna dedicata ad una tipologia (scarto l'idea di molteplici layout caricati in un'unica Activity perchè la gestione dei campi sarebbe complessa e quindi foriera di sicuri errori e bug).

ps: la parte "standard" è quella che si riferisce ai dati generici di un appuntamento (es. data/ora dell'appuntamento) mentre la parte variabile è quella di cui sopra.
pps: le conversioni map-byte le faccio già perchè utilizzo un mio sistema alternativo a RDC.
 

ken87

Active Member
Licensed User
Longtime User
Grazie udg,
ora provo altra cosa il codice :
B4X:
For row = 0 To 5
        'load the 3 panels layout to fill each clv's row.
        Dim rowpnl As Panel
        rowpnl.Initialize("")
        rowpnl.LoadLayout("lytGridRow")
        Dim bckpnl As Panel  = rowpnl.GetView(0)    'layout has a backpanel as itd foundation
     
        'load the 3 panels layout to fill each clv's row.
        Dim rowpnl As Panel
        rowpnl.Initialize("")
        rowpnl.LoadLayout("lytGridRow")
        Dim bckpnl As Panel  = rowpnl.GetView(0)    'layout has a backpanel as itd foundation
     
        'Left cell panel
        Dim cellpnl As Panel = bckpnl.getview(0) 'left cell
        cellpnl.LoadLayout("lytCell")
        'we should load DB data in cellpnl's items, but here we don't so nothing is shown
     
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim image As ImageView = bckp.GetView(0)    'image view
        image.Bitmap = LoadBitmapSample(File.DirAssets,"pizza.png",bckp.Width, bckp.Height/2)
        Dim title As Label = bckp.GetView(1)        'title
        title.Text = "Pizza Margherita  7 €"
        Dim Stitle As Label = bckp.GetView(2)        'subtitle
        Stitle.Text = "Sugo,Mozarella"
        'Dim Prezzo As Label = bckp.GetView(3) 'nuova label posta dopo immagine, title e subtitle
        'Prezzo.Text ="8 euro"
     
        'Center cell panel
        Dim cellpnl As Panel = bckpnl.getview(1) 'center cell
        cellpnl.LoadLayout("lytCell")
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim image As ImageView = bckp.GetView(0)    'image view
        image.Bitmap = LoadBitmapSample(File.DirAssets,"pizw.png",bckp.Width, bckp.Height/2)
        Dim title As Label = bckp.GetView(1)        'title
        title.Text = "Pizza Wurstel 8 € "
        Dim Stitle As Label = bckp.GetView(2)        'subtitle
        Stitle.Text = "Pomodoro ,mozarella, Wurstel"
'        Stitle.Ellipsize = "END"
        'load Quantity, etc data too
     
        'Right cell panel
        Dim cellpnl As Panel = bckpnl.getview(2) 'right cell
        cellpnl.LoadLayout("lytCell")
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim image As ImageView = bckp.GetView(0)    'image view
        image.Bitmap = LoadBitmapSample(File.DirAssets,"pizsal.png",bckp.Width, bckp.Height/2)
        Dim title As Label = bckp.GetView(1)        'title
        title.Text = "Pizza Sasisccia secca 5 €"
        Dim Stitle As Label = bckp.GetView(2)        'subtitle
        Stitle.Text = "Pomodoro ,mozarella, Sasiccia"
        'load Subtitle, Quantity, etc data too
     
        clvGrid.Add(rowpnl, cellheight, row)    'add the Row Panel to the CLV
    Next
End Sub

Valorizza le celle a variabile impostata.
Io vorrei che i valori fossero passati da una varibile esterna tipo database e ogni box fosse diverso quindi ogni cella contenesse valori diversi
Che modifica devo fare?
Grazie mille
 

udg

Expert
Licensed User
Longtime User
Dipende da come ricevi i dati dal DB. Ad esempio se hai una lista di mappe, dove ogni mappa riporta i dati di un piatto, allora fai riferimento alla lista, estrai la mappa ed usane i valori per valorizzare i campi di ciascun pannellino.
In pratica il loop FOR viene sostituito da un loop sulla lista. Stesso discorso se utilizzi direttamente un Cursor/RecordSet per leggere uno alla volta i record. In quel caso il loop andrà dal primo all'ultimo elemento del RecordSet e per ciascuno avrai i campi del DB per valorizzare quelli del pannellino.

Attenzione che nello schema di cui sopra ogni riga del pannellino contiene 3 "piatti" quindi sia nel caso lista che in quello RecordSet devi prelevare 3 elementi alla volta. Se all'ultimo giro di loop ne hai di meno, inserisci una cella vuota (ovvero il solo pannello di supporto).
 

ken87

Active Member
Licensed User
Longtime User
Ciao allora ho fatto una prova con la lista così ho lascito il database per ora:

B4X:
Dim List1 As List
    List1.Initialize
    List1.Add("Pizza margerita")
    List1.Add("Pizza wurstel")
    List1.Add("Pizzza sarda")
    List1.Add("Pizza olive")
 
    List1.Add("Pizza rossa")
    List1.Add("Pizza frutti di mare")
    List1.Add("Pizzza svedese")
    List1.Add("Pizza salsiccia secca")

e poi fatto il ciclo:
B4X:
For row = 0 To 5
        'load the 3 panels layout to fill each clv's row.
        Dim rowpnl As Panel
        rowpnl.Initialize("")
        rowpnl.LoadLayout("lytGridRow")
        Dim bckpnl As Panel  = rowpnl.GetView(0)    'layout has a backpanel as itd foundation
     
        'load the 3 panels layout to fill each clv's row.
        Dim rowpnl As Panel
        rowpnl.Initialize("")
        rowpnl.LoadLayout("lytGridRow")
        Dim bckpnl As Panel  = rowpnl.GetView(0)    'layout has a backpanel as itd foundation
     
        'Left cell panel
        Dim cellpnl As Panel = bckpnl.getview(0) 'left cell
        cellpnl.LoadLayout("lytCell")
        'we should load DB data in cellpnl's items, but here we don't so nothing is shown
     
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim image As ImageView = bckp.GetView(0)    'image view
        image.Bitmap = LoadBitmapSample(File.DirAssets,"pizza.png",bckp.Width, bckp.Height/2)
        Dim title As Label = bckp.GetView(1)        'title
        title.Text = List1.Get(row)
        Dim Stitle As Label = bckp.GetView(2)        'subtitle
        Stitle.Text = "mozarella"
        'Dim Prezzo As Label = bckp.GetView(3) 'nuova label posta dopo immagine, title e subtitle
        'Prezzo.Text ="8 euro"
     
        'Center cell panel
        Dim cellpnl As Panel = bckpnl.getview(1) 'center cell
        cellpnl.LoadLayout("lytCell")
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim image As ImageView = bckp.GetView(0)    'image view
        image.Bitmap = LoadBitmapSample(File.DirAssets,"pizw.png",bckp.Width, bckp.Height/2)
        Dim title As Label = bckp.GetView(1)        'title
        title.Text =   List1.Get(row+1)
        Dim Stitle As Label = bckp.GetView(2)        'subtitle
        Stitle.Text = "Pomodoro ,mozarella, Wurstel"
'        Stitle.Ellipsize = "END"
        'load Quantity, etc data too
     
        'Right cell panel
        Dim cellpnl As Panel = bckpnl.getview(2) 'right cell
        cellpnl.LoadLayout("lytCell")
        Dim bckp As Panel = cellpnl.GetView(0)
        Dim image As ImageView = bckp.GetView(0)    'image view
        image.Bitmap = LoadBitmapSample(File.DirAssets,"pizsal.png",bckp.Width, bckp.Height/2)
        Dim title As Label = bckp.GetView(1)        'title
        title.Text = List1.Get(row+2)
        Dim Stitle As Label = bckp.GetView(2)        'subtitle
        Stitle.Text = "Pomodoro ,mozarella, Sasiccia"
        'load Subtitle, Quantity, etc data too
     
        clvGrid.Add(rowpnl, cellheight, row)    'add the Row Panel to the CLV
    Next
End Sub
Andando a mettere aposto del tirolo fisso:
B4X:
 title.Text = List1.Get(row) ' primo elemto
title.Text = List1.Get(row + 1) ' secondo elemento
title.Text = List1.Get(row + 2) ' terzo elemneto

I primi tre vengono valorizzati bene
ma come faccio adesso a becare il 4 5 6 elemento che sono:
B4X:
List1.Add("Pizza olive")
List1.Add("Pizza rossa")
List1.Add("Pizza frutti di mare")
 

udg

Expert
Licensed User
Longtime User
Non dovevi usare row. Quello ti serve per le righe della CLV.
Riga 0 - elementi della lista 0,1,2
Riga 1 - elementi della lista 3,4,5
e così via.
Puoi usare una formula che lega le due cose oppure una variabile globale solo per la lista.
Nel primo caso avrai row = indice_lista / 3 (la parte intera della divisione ti dà la riga). Quindi un loop sull'intera lista, ti produce di volta in volta la row su cui operare, mentre cella = indice_lista mod 3, ritornando sempre 0,1,2 ti dirà se riempire il pannellino di sx, centro, o dx ( bckpnl.getview(cella) )
 

udg

Expert
Licensed User
Longtime User
Deciso no, non ancora. Risolto, sì.
 

udg

Expert
Licensed User
Longtime User
Passo su Chiacchericci, altrimenti qui confondiamo le idee a chi si aspetat di leggere a proposti del menu grafico.
 

ken87

Active Member
Licensed User
Longtime User
Ciao,
Indice_lista che valore lo imposto?
B4X:
For row = 0 To 5
dim indice_lista as int
indice_lista = ?
row = indice_lista / 3

title.Text = List1.Get(row) '1 elemento
title.Text = List1.Get(row+1) ' 2 elemento
title.Text = List1.Get(row+3) ' 3 elemento
Posso anche usare una variabile globale
 

LucaMs

Expert
Licensed User
Longtime User
Scusa, eh, Ken, ma esistono due pdf con la documentazione e moltissimi post su questi argomenti.

Un conto è fare una o due domande precise, altro è farti seguire passo-passo per ogni dettaglio.

Leggi i pdf o cerca sul sito.
 

udg

Expert
Licensed User
Longtime User
Intendevo qualcosa tipo:
B4X:
For indice_lista = 0 to List1.Size-1
   dim row as int = indice_lista / 3
   dim cell as int = (indice_list mod 3 )
   'se è la prima cella di una riga, crea la riga. altrimenti la richiama per riempire le celle numero 2 e 3
   Dim rowpnl As Panel
   if cell = 0 then
      'load the 3 panels layout to fill each clv's row.
      rowpnl.Initialize("")
      rowpnl.LoadLayout("lytGridRow")
   else
      rowpnl = clv1.getPanel(row)  
   end if
   Dim bckpnl As Panel = rowpnl.GetView(0) 'layout has a backpanel as its foundation
   'Compila i vari campi della cella
   Dim cellpnl As Panel = bckpnl.getview(cell) 
   cellpnl.LoadLayout("lytCell") 
   Dim bckp AsPanel = cellpnl.GetView(0) 'pannellino di base della singola cella
   Dim image As ImageView = bckp.GetView(0) 'image view
   image.Bitmap = LoadBitmapSample(File.DirAssets,"pizza.png",bckp.Width, bckp.Height/2)
   Dim title AsLabel = bckp.GetView(1) 'title 
   title.Text = List1.Get(indice_lista)
   Dim Stitle As Label = bckp.GetView(2) 'subtitle 
   Stitle.Text = "mozarella"'
   Dim Prezzo As Label = bckp.GetView(3) 'nuova label posta dopo immagine, title e subtitle
   Prezzo.Text ="8 euro"
   'Aggiorna la riga della clv oppure inseriscine una nuova
   if cell <> 0 then
     clvGrid.ReplaceAt(row, rowpnl, cellheight, row)
   else
     clvGrid.Add(rowpnl, cellheight, row) 'add the Row Panel to the CLV
  end if
next

Non è codice testato, l'ho sfritto direttamente qui nel post, quindi controlla bene. Ad ogni odo dovrebeb darti l'idea di come procedere.
 

ken87

Active Member
Licensed User
Longtime User
ok ora provo,
va in errore ora cerco di capire
una cosa
B4X:
rowpnl = clv1.getPanel(row)

Clv1 non esiste intentevi

B4X:
rowpnl = clvGrid.getPanel(row)
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
@udg mi faresti un App pure a me? :p
 

udg

Expert
Licensed User
Longtime User
eheh, ma qui si tratta di pizza!
Vedrai che alla fine avremo tutti una fornitura gratuita di pizze per un anno, vero @ken87 ?
@Star-Dust : tu che offri?
 

Star-Dust

Expert
Licensed User
Longtime User
Sto facendo un App per una ditta di pulizie.
Posso offrire la pulizia del cesso per un anno :p
 

LucaMs

Expert
Licensed User
Longtime User
Sto facendo un App per una ditta di pulizie.
Posso offrire la pulizia del cesso per un anno :p
Questa merita più di un singolo Like, per cui...
upload_2017-10-20_18-42-56.png
upload_2017-10-20_18-42-57.png
upload_2017-10-20_18-42-58.png
 

Star-Dust

Expert
Licensed User
Longtime User
:)

ezgif.com-optimize.gif


E' una bozza, mancano ancora calendari, planning dei lavori. Gestione squadre. Ricevute interventi......

Completa e ti vengo a pulire il bagno io personalmente :D
 
Top