Italian Formattazione numeri in B4XTable

Sabotto

Well-Known Member
Licensed User
Voglio formattare i numeri con due decimali e il punto di separazione delle migliaia
Mi serve sia per delle Label che per le colonne di una B4XTable
Ho usato il B4XFormatter come suggerito da Erel in questo post
Ma mentre per le label, funziona, per la b4XTable, no
Dove sbaglio?

B4X:
Private FormatoNumeri As B4XFormatter
FormatoNumeri.Initialize
SetFormatNumber

Sub SetFormatNumber
    Dim DefaultFormat As B4XFormatData = FormatoNumeri.GetDefaultFormat
    DefaultFormat.MaximumFractions = 2
    DefaultFormat.MinimumFractions = 2
    DefaultFormat.GroupingCharacter="."
    DefaultFormat.DecimalPoint=","
End Sub


'Le label mostrano il numero bene
'TotImporto è 1234.56
lblTotImporto.text= FormatoNumeri.Format(TotImporto)  ' ===> 1.234,56 OK!

'Per la table, invece,  non funziona nessuna delle 3 seguenti istruzioni:

tblData.DefaultDataFormatter.GetDefaultFormat.MinimumFractions = 2     ' niente'
tblData.DefaultDataFormatter=FormatoNumeri                             ' nisba
tblData.DefaultFormatter=FormatoNumeri                                 ' non va...'
 

Sabotto

Well-Known Member
Licensed User
Niente da fare.

Senza nome.png



B4X:
tblData.DefaultFormatter.GetDefaultFormat.DecimalPoint = ","
tblData.DefaultFormatter.GetDefaultFormat.GroupingCharacter = "."
tblData.DefaultDataFormatter.GetDefaultFormat.MinimumFractions = 2
tblData.DefaultDataFormatter = tblData.DefaultFormatter

Sub tblData_DataUpdated
    tblData.DefaultFormatter.FormatLabel(tblData.CurrentPage, tblData.lblNumber)
End Sub

Tra l'altro vorrei i 2 decimali solo alle ultime 2 colonne e non ai Km
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Tra l'altro vorrei i 2 decimali solo alle ultime 2 colonne e non ai Km
tblData.GetColumn("Importo").Formatter...
tblData.GetColumn("Litri").Formatter...

oppure

tblData.Columns.Get(2).As(B4XTableColumn).Formatter ...
tblData.Columns.Get(3).As(B4XTableColumn).Formatter ...


La seconda versione potrebbe essere utile per la "localizzazione" (lingue) dell'app, anche se sarebbe meglio ancora creare dei "Column ID" come costanti da usare al posto dei literal "Importo" e "Litri" nelle prime due righe.
 
Last edited:

Sabotto

Well-Known Member
Licensed User
tblData.GetColumn("Importo").Formatter...
tblData.GetColumn("Litri").Formatter...
ma dove dovrei metterla, sempre nell'evento DataUpdated?
e come va scritta?
B4X:
tblData.GetColumn("Importo").Formatter...???? 'come continua?

comunque continua a non funzionare, boh
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Mo me costringi a prova'!
Ho pure appena finito di cenare ?

Va beh, forse farò una prova B4J (B4XPages, ovviamente ?) da conservare proprio per eventuali prove future.
Dovrei avere qualche db distribuito proprio a questo scopo (come minimo il famoso Northwind, ma credo di averne anche un altro, meno "ampio").

P.S. ChinookDatabase1.3_Sqlite. Benché... Northwind era "carino", ricordo.

1700865947201.png
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Va beh, forse farò una prova B4J (B4XPages, ovviamente ?) da conservare proprio per eventuali prove future.

1700870233276.png


A me funziona, senza problemi e senza utilizzare l'evento B4XTable1_DataUpdated.

Allego il progetto.
Non posso allegare il db, Chinook_Sqlite.sqlite, per il limite di spazio per i post; puoi scaricarlo da qui.

L'unico campo numerico utile per quel test è "Total" della tabella "Invoice". Cambia qualche valore, perché sono bassi, non potresti vedere il punto come separatore delle migliaia.
 

Attachments

  • PerProveDB.zip
    15.6 KB · Views: 123
Last edited:

Sabotto

Well-Known Member
Licensed User
ho risolto (in parte) così.
B4X:
    B4XTable1.DefaultDataFormatter = B4XTable1.DefaultFormatter
    B4XTable1.DefaultFormatter.GetDefaultFormat.DecimalPoint = ","
    B4XTable1.DefaultFormatter.GetDefaultFormat.GroupingCharacter = "."
    B4XTable1.DefaultDataFormatter.GetDefaultFormat.MinimumFractions = 2
  
    B4XTable1.AddColumn("ID", B4XTable1.COLUMN_TYPE_TEXT)
    B4XTable1.AddColumn("Data", B4XTable1.COLUMN_TYPE_TEXT)
    B4XTable1.AddColumn("Km", B4XTable1.COLUMN_TYPE_NUMBERS)
    B4XTable1.AddColumn("Importo", B4XTable1.COLUMN_TYPE_NUMBERS)
    B4XTable1.AddColumn("Litri", B4XTable1.COLUMN_TYPE_NUMBERS)
    B4XTable1.VisibleColumns.RemoveAt(0)
    B4XTable1.Columns.Get(0).As(B4XTableColumn).Panel.Visible = False

In parte, perchè i Km li vorrei si con il separatore delle migliaia, ma senza i due decimali.
Ma aggiungendo alla fine del blocco di codice che ho postato sopra, la seguente istruzione
B4X:
B4XTable1.GetColumn("Km").Formatter.GetDefaultFormat.MaximumFractions = 0

fa si che anche le altre due colonne non mi mostrano più i decimali!
(allego il miniprogetto in B4J di test, con relativo piccolo db sqlLite, (magari qualche anima pia....) ?
 

Attachments

  • PerProveDB1.zip
    17.4 KB · Views: 91
Last edited:

LucaMs

Expert
Licensed User
Longtime User
In parte, perchè i Km li vorrei si con il separatore delle migliaia, ma senza i due decimali.
Dopo essermici ammattito un bel po', circa 85 ore ?, credo che adesso sia come lo volevi (a parte il blu che ho aggiunto per prova e puoi togliere).
[Non me gusta come hai "nascosto" la prima colonna]
 

Attachments

  • SAB_PerProveDB.zip
    17.7 KB · Views: 112

Sabotto

Well-Known Member
Licensed User
Dopo essermici ammattito un bel po', circa 85 ore ?, credo che adesso sia come lo volevi (a parte il blu che ho aggiunto per prova e puoi togliere).
Buondi. perfetto e soprattutto grazie. Mi piacerebbe capire come hai ragionato, nel senso che non ho ben capito le differenze fra i B4XFormatter, i B4XFormatData, DefaultFormat, ecc. Devo andare a leggermi bene questo che ho trovato solo ora (avevo cercato poco e male evidentemente)
[Non me gusta come hai "nascosto" la prima colonna]
Soprattutto m piacerebbe capire "porchè, non te gusta e como te gusterebbe..."

edit: Provato il tutto con il mio progetto e la formattazione non va!. :mad::mad::mad: Sto cercando cosa c'è che puo dare fastidio. Seguiranno aggiornamenti
 
Last edited:

Sabotto

Well-Known Member
Licensed User
Allora: la questione è questa.
Il tuo esempio in B4J funziona. In B4A no.
Allego il progettino di esempio anche con la versione B4A.
Inoltre, in B4A, la B4XTable appare spostata a destra.
 

Attachments

  • SAB2_PerProveDB.zip
    19.8 KB · Views: 101

LucaMs

Expert
Licensed User
Longtime User
Inoltre, in B4A, la B4XTable appare spostata a destra.
Sul mio smartphone no, è centrata, e non vedo motivi per cui non dovrebbe esserlo.

Soprattutto m piacerebbe capire "porchè, non te gusta e como te gusterebbe..."
Perché rimane un "buco" sulla sinistra. Dovresti impostare la sua larghezza a zero.

Il tuo esempio in B4J funziona. In B4A no.
Questo dovresti proprio chiederlo ad Erel, perché essendo il formatter B4X, dovrebbe funzionare anche in B4J (e B4i) ed io mi ci sono ammazzato già più che a sufficienza :mad: ?
 

Sabotto

Well-Known Member
Licensed User
Sul mio smartphone con B4A il buco non rimane, mentre con l'esempio che stiamo postando, si..
Comunque il.nodo.orincipale è quello che in B4J fa una cosa è in B4A no. Apro un post sul forum internazionale.
Grazie ancora per la.pazienza
 

LucaMs

Expert
Licensed User
Longtime User
Sul mio smartphone con B4A il buco non rimane, mentre con l'esempio che stiamo postando, si..
Comunque il.nodo.orincipale è quello che in B4J fa una cosa è in B4A no. Apro un post sul forum internazionale.
Grazie ancora per la.pazienza
Penso che ci passerò la notte ?

(Anche a studiare più a fondo le B4XTable, forse anche il sorgente, perché non tutto mi è chiarissimo).
 

Sabotto

Well-Known Member
Licensed User
Allora devo recuperare il progetto che hai allegato, in cui non rimane buco. Spero di prende quello giusto.

View attachment 148089

Quello è B4J ma stessa cosa in B4A.


P.S. Non mi pare che tu abbia allegato progetti, se non l'ultimo, modifica del mio.
RISOLTO!!!
Nell'aggiunta delle colonne con la versione B4A non le avevo tipizzate come NUMERIC, a differenza di quanto fatto con B4J!
Nn ho però capito ancora come fare a nascondere (mettere a zero .width) la prima colonna. Se faccio
B4X:
B4XTable1.AddColumn("ID", B4XTable1.COLUMN_TYPE_TEXT).Width=0
non ha nessun effetto e la colonna la vedo comunque
 

Sabotto

Well-Known Member
Licensed User
Manca la questione "buco" ?
eh... il bello è che con il progetto mio completo (che non ho mai allegato) la colonna, con il mio sistema che non te gusta, si nascondeva bene, senza lasciare il buco
 
Top