Italian Formattazione numeri in B4XTable

Sabotto

Active Member
Licensed User
Ok. trovato. Così scompare la colonna e non si vede il buco. Ed è anche la strada indicata da Erel
B4X:
        Dim IDColumn As B4XTableColumn = B4XTable1.AddColumn("ID", B4XTable1.COLUMN_TYPE_TEXT)
        B4XTable1.AddColumn("Data", B4XTable1.COLUMN_TYPE_TEXT)
            
        B4XTable1.VisibleColumns.RemoveAt(B4XTable1.VisibleColumns.IndexOf(IDColumn))
        B4XTable1.Refresh
 

LucaMs

Expert
Licensed User
Longtime User
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)
Lo sto leggendo adesso. Per dirne una, pensavo si usassero solo con le B4XTable, che addirittura ne facessero parte. Invece, come scritto nel tutorial (inglese; non ne scrivo uno in italiano, visto la fine del precedente, sulle B4XPages 😄), riassumo qui quanto ho capito (e capirò).
 

Sabotto

Active Member
Licensed User
Cosi sparisce ed è anche la strada indicata da Eerl in un suo esempio
B4X:
        Dim IDColumn As B4XTableColumn = B4XTable1.AddColumn("ID", B4XTable1.COLUMN_TYPE_TEXT)
               
        B4XTable1.VisibleColumns.RemoveAt(B4XTable1.VisibleColumns.IndexOf(IDColumn))
        B4XTable1.Refresh

ops doppio post. avevo gia scritto sopra
 

LucaMs

Expert
Licensed User
Longtime User
Cosi sparisce ed è anche la strada indicata da Eerl in un suo esempio
B4X:
        Dim IDColumn As B4XTableColumn = B4XTable1.AddColumn("ID", B4XTable1.COLUMN_TYPE_TEXT)
              
        B4XTable1.VisibleColumns.RemoveAt(B4XTable1.VisibleColumns.IndexOf(IDColumn))
        B4XTable1.Refresh
Sì ma non è necessario creare la nuova colonna, puoi farlo in qualunque "momento" (punto del progetto in cui decidi di nasconderle, che non è detto sia fin dall'inizio, anche se nel tuo caso si. Nel progetto che avevo sviluppato, ad esempio, ne nascondevo 4 alla volta, a seconda di 3 situazioni diverse).

Inoltre, se conosci l'indice della colonna, puoi scrivere direttamente:
B4X:
        B4XTable1.VisibleColumns.RemoveAt(3) ' se volessi nascondere la 4a colonna.
        B4XTable1.Refresh
 

LucaMs

Expert
Licensed User
Longtime User
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)
Lo sto leggendo adesso. Per dirne una, pensavo si usassero solo con le B4XTable, che addirittura ne facessero parte. Invece, come scritto nel tutorial (inglese; non ne scrivo uno in italiano, vista la fine del precedente, sulle B4XPages 😄 ), riassumo qui quanto ho capito (e capirò).

(Qualcosa, che non posso scrivere, mi ha distratto [e fatto incacchiare]. Riprendo da qui)

Formatter è l'oggetto base (la classe base; al solito: oggetto = istanza di classe, per cui si dovrà creare una variabile di tipo B4XFormatter ed inizializzarla).
Ad esso si possono aggiungere N oggetti di tipo B4XFormatData, che in pratica hanno le "istruzioni" (proprietà) su come dovranno essere visualizzati dati numerici.
Di default l'oggetto di tipo B4XFormatter che creerete avrà già un B4XFormatData, con valori di default. Per accedere a quest'ultimo, si potrà usare il metodo GetDefaultFormat (es. creo una variabile xFormatter, la inizializzo e con xFormatter.GetDefaultFormat otterrò il B4XFormatData già creato di default).

Invento al volo un esempio, creando alcuni oggetti B4XFormatData (mentre guardo Poirot, quindi non sarà un esempio eccezionale 😄. Ecco, lo avevo già visto).
B4X:
Dim xFormatter As B4XFormatter
xFormatter.Initialize

'Esempio di Erel: creo un nuovo oggetto di tipo B4XFormatData che sarà utile per formattare valori numerici negativi.
'Posso dargli il nome che voglio, ovviamente, quindi cambio quello dato da Erel, solo per "chiarire".
'Tanto per non crearlo da zero, con Inizialize e impostando già alcune proprietà, come il numero di decimali, il simbolo per i decimali, etc.
'copio i dati, le proprietà dall'oggetto di tipo B4XFormatData che viene creato automaticamente, di default, quando inizializzo xFormatter.
Dim frmtNegatives As B4XFormatData = xFormatter.CopyFormatData(xFormatter.GetDefaultFormat)
frmtNegatives.TextColor = xui.Color_Red
frmtNegatives.Prefix = "$ ("
frmtNegatives.Postfix = ")"
frmtNegatives.FormatFont = xui.CreateDefaultBoldFont(15)
'Aggiungo a xFormatter (che ricordo è la base) questo nuovo oggetto di tipo B4XFormatData.
'Mi servirà quando vorrò scrivere, ad esempio in una Label, un valore numerico negativo, ovvero tra MIN_VALUE e 0 (zero), questi due esclusi (quel False).
xFormatter.AddFormatData(frmtNegatives, xFormatter.MIN_VALUE, 0, False) 'from MIN_VALUE to 0 not including the edges
'
'Ora potrei creare un altro oggetto di tipo B4XFormatData, ad esempio se un importo sarà superiore a 10.000€ dovrà essere visualizzato in Blu!
Dim frmt10000 As B4XFormatData = xFormatter.CopyFormatData(xFormatter.GetDefaultFormat)
frmt10000.TextColor = xui.Color_Blue
'Aggiungo a xFormatter (che ricordo è la base) questo nuovo oggetto di tipo B4XFormatData.
xFormatter.AddFormatData(frmt10000, 10000, xFormatter.MAX_VALUE, True)
Nel mio progetto, in una Label potrò scrivere:
B4X:
Label1.Text = "100" ' Le doppie virgolette non sarebbero necessarie
'Oppure:.
Label1.Text = NumberFormat2(...)
'O ancora, avendo creato xFormatter come sopra, come variabile globale nel modulo che sto scrivendo (ad esempio una B4XPage):
xFormatter.FormatLabel(100, Label1) ' Verrà usato il B4XFormatData di default.
xFormatter.FormatLabel(-78, Label1)' Verrà usato il B4XFormatData frmtNegatives, quindi in rosso e tra $().
xFormatter.FormatLabel(15999, Label1) ' Verrà usato il B4XFormatData frmt10000, quindi verrà scritto in blu, visto che è >= 10000

Le altre proprietà degli oggetti B4XFormatData (che modificano l'aspetto dell'output) sono:

B4XFormatData fields:
  • Prefix - Un testo che sarà visualizzato prima del numero.
  • Postfix - Un testo che sarà visualizzato dopo numero.
  • MinimumIntegers - Il numero minimo di interi che si vuole visualizzare.
  • MinimumFractions - Il numero minimo di cifre decimali che si vuole visualizzare.
  • MaximumFractions - Il numero massimo di cifre decimali che si vuole visualizzare.
  • GroupingCharacter - Il carattere che si vuole visualizzare come separatore delle migliaia.
  • DecimalPoint - Il carattere che si vuole visualizzare come separatore dei decimali.
  • TextColor / FormatFont - Da usare con FormatLabel.
  • RemoveMinusSign - Impostarlo su True per non visualizzare il segno meno con i numeri negativi.


Mi pare di averlo scritto decentemente 😊 (Spero senza errori, visto che l'ho scritto direttamente qui e non l'ho testato).

P.S. A quanto pare, anziché il metodo Format del formatter, si deve usare il metodo FormatLabel. Quindi correggo il codice qui sopra.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
(Spero senza errori, visto che l'ho scritto direttamente qui e non l'ho testato).
Non mi pare di aver commesso errori, eppure il colore non cambia, malgrado la formattazione venga correttamente usata (si vede subito scrivendo un numero negativo).

(Cercherò).

Allegato test B4XPages (B4J e B4A).


P.S. A quanto pare, anziché il metodo Format del formatter, si deve usare il metodo FormatLabel.
Correggetelo voi, nel progetto allegato
😊

1701043855302.png



1701043863632.png
 

Attachments

  • FormatterTest.zip
    15.6 KB · Views: 29
Last edited:
Top