Per chi realizza applicazioni Web secondo certi criteri di qualità, la corretta rappresentazione delle informazioni visualizzate dall'interfaccia ed il controllo e la validazione dei dati inseriti dall'utente finale rappresentano due aspetti importanti da non sottovalutare.
A questo scopo ASP.NET mette a disposizione dello sviluppatore i controlli HTML e i controlli Web tramite i quali è possibile rappresentare i dati in output secondo un certo ordine ed acquisire e validare le informazioni in ingresso. Nell'ambito dei controlli è possibile formattare i dati a piacimento sfruttando le possibilità fornite dal .NET Framework.
Tramite il tipo di dati System.String, allo sviluppatore vengono infatti fornite alcune funzioni (ed, in particolare, il metodo statico Format) che permettono di rappresentare le stringhe di caratteri in qualsiasi forma desiderata.
In particolare, le regole di formattazione stabiliscono le modalità di conversione di un valore nella relativa rappresentazione in forma di stringa.
Il namespace System.Text.RegularExpressions contiene le classi che forniscono accesso al modulo delle regular expressions. In questo spazio dei nomi viene fornita la funzionalità delle regular expressions, che può essere utilizzata da qualsiasi piattaforma o linguaggio eseguito nell'ambito del .NET Framework.
In questo articolo verranno trattate le modalità con cui formattare le stringhe ed utilizzare le regular expressions e verranno forniti alcuni esempi pratici relativamente alla formattazione e validazione dei dati utilizzando i controlli Web ASP.NET.
Alcune considerazioni sul tipo String
Una stringa è un insieme sequenziale di caratteri Unicode, tipicamente utilizzato per rappresentare un testo. Una volta creato, un oggetto String rappresenta una sequenza di oggetti System.Char e non è più modificabile. Qualsiasi funzione applicata ad una istanza di String in realtà restituisce un altro oggetto dello stesso tipo che può essere assegnato alla stessa variabile di partenza.
Una volta avvenuta questa assegnazione, l'istanza originale si perde e viene opportunamente gestita dal garbage collector. Ciascun elemento di una stringa è rappresentato da un valore scalare Unicode, che equivale al valore numerico ordinale del carattere Unicode corrispondente rappresentato da un oggetto Char.
Pertanto l'oggetto String è costituito da un'insieme di oggetti Char. Un indice è la posizione di un oggetto Char nell'ambito di un oggetto String: si tratta di un numero intero non negativo a base zero che parte dalla prima posizione della stringa (ovvero quella con indice zero).
Formattare i numeri
Il metodo statico String.Format() permette di formattare una stringa, inserendo al suo interno uno o più valori numerici o date. La stringa da formattare può contenere dei marcatori nella forma {i} (dove i è un numero intero non negativo) corrispondenti agli argomenti:
Dim s As String = "String" Dim result As String result = String.Format("Il tipo di {0} è {1}", "s", s) 'Il tipo di s è String result = String.Format("Il valore è {0}", 1234.5678) 'Il valore è 1234.5678
Nel caso di argomenti numerici, è possibile utilizzare alcune informazioni aggiuntive di formattazione all'interno del marcatore:
- G sta per General;
- N sta per Number (inserisce i separatori di migliaia);
- C sta per Currency (valuta);
- D sta per Decimal (accetta solo valori interi, in caso contrario solleva una eccezione);
- E sta per Scientific (notazione con esponente);
- F sta per Fixed-Point (virgola fissa);
- P sta per Percent (valore percentuale);
- R sta per Round-Trip (mantiene tutte le cifre significative);
- X sta per Hexadecimal (valore esadecimale).
Inoltre è possibile specificare il numero di cifre decimali aggiungendo un numero intero dopo la lettera che rappresenta il tipo di formattazione. Se non viene indicato, il numero di cifre dopo la virgola è pari a 2.
Riprendendo l'esempio precedente, specificando le ulteriori informazioni di formattazione, il risultato è il seguente nelle diverse casistiche:
result = String.Format("Il valore è {0:N}", 1234) 'Il valore è 1,234.00 result = String.Format("Il valore è {0:N2}", 1234.5678) 'Il valore è 1,234.56 result = String.Format("Il valore è {0:D6}", 1234) 'Il valore è 001234 result = String.Format("Il valore è {0:C2}", 1234.5678) 'Il valore è $1234.56 result = String.Format("Il valore è {0:F3}", 1234.5678) 'Il valore è 1234.567 result = String.Format("Il valore è {0:E2}", 1234.5678) 'Il valore è 1.23457E+003 result = String.Format("Il valore è {0:P3}", 12.3456) 'Il valore è 12.346% result = String.Format("Il valore è {0:R}", System.Math.PI) 'Il valore è 3.1415926535897931 result = String.Format("Il valore è {0:X6}", 123456) 'Il valore è 01E240
Oltre a quanto detto finora è possibile definire formattazioni custom utilizzando i caratteri speciali indicati di seguito:
- # indica una cifra o uno spazio;
- 0 indica una cifra o uno zero;
- . indica il separatore decimale (la nostra virgola);
- , indica il separatore di migliaia (il nostro punto);
- % indica il valore percentuale;
- E+000 indica il formato esponenziale (esponente positivo);
- E-000 indica il formato esponenziale (esponente negativo);
- ; indica il separatore di sezione (fino ad una massimo di tre);
- \ è il carattere di escape;
- "..." indica un gruppo di caratteri letterali;
- '...' indica un gruppo di caratteri letterali, come il precedente.
Un paio di esempi:
result = String.Format("Il valore è {0:##,###.00}", 1234.5678) 'Il valore è 1,234.57 result = String.Format("Il valore è {0:#.####E+000}", 1234.5) 'Il valore è 1.2345E+003
Formattare le date
Utilizzando il metodo statico String.Format() è possibile formattare anche i valori di data e ora utilizzando marcatori standard e/o personalizzati.
result = String.Format("Oggi è il giorno {0:d}", DateTime.Now) 'Oggi è il giorno 10/5/2004 result = String.Format("Oggi è il giorno {0:dd\/MM\/yyyy}", DateTime.Now) 'Oggi è il giorno 05/10/2004
Di seguito sono elencati alcuni formati standard per la formattazione di date e ore:
- d rappresenta la data nel formato breve (10/5/2004);
- D rappresenta la data nel formato esteso (Tuesday, October 05, 2004);
- f rappresenta la data estesa e ora breve (Tuesday, October 05, 2004 1:05 AM);
- F rappresenta la data estesa e ora estesa (Tuesday, October 05, 2004 1:05:30 AM);
- g rappresenta la data breve e ora breve (10/5/2004 1:05 AM);
- G rappresenta la data breve e ora estesa (10/5/2004 1:05:30 AM).
Anche per le date e le ore è possibile definire regole di formattazione personalizzate, utilizzando i caratteri speciali dei quali i principali sono riportati di seguito:
- d rappresenta il giorno del mese (una o due cifre);
- dd rappresenta il giorno del mese (sempre due cifre);
- M rappresenta il mese (una o due cifre);
- MM rappresenta il mese (sempre due cifre);
- yy rappresenta l'anno (due cifre);
- yyyy rappresenta l'anno (quattro cifre);
- H rappresenta l'ora in formato 24-ore (una o due cifre);
- HH rappresenta l'ora in formato 24-ore (sempre due cifre);
- h rappresenta l'ora in formato 12-ore (una o due cifre);
- hh rappresenta l'ora in formato 12-ore (sempre due cifre);
- m rappresenta l'ammontare dei minuti (una o due cifre);
- mm rappresenta l'ammontare dei minuti (sempre due cifre);
- s rappresenta l'ammontare dei secondi (una o due cifre);
- ss rappresenta l'ammontare dei secondi (sempre due cifre);
- t rappresenta il designatore AM/PM (primo carattere);
- tt rappresenta il designatore AM/PM (entrambi i caratteri);
- \ è il carattere di escape;
- / è il separatore di default per le date;
- : è il separatore di default per le ore.
Un esempio pratico: DataGrid
Quando si definiscono le BoundColumn di una DataGrid, è possibile specificare la formattazione delle stringhe da inserire in ciascuna colonna. Infatti la proprietà DataFormatString permette di impostare la stringa in cui è specificato il formato di visualizzazione per gli elementi della colonna.
La stringa del formato dei dati è costituita da due parti, separate da un simbolo di due punti, con la sintassi {i:Xnn} vista nei paragrafi precedenti.
La stringa di formattazione {0:F2}, ad esempio, visualizza un numero a virgola fissa con due posizioni decimali, mentre {0:d} visualizza una data nel formato breve. L'intera stringa deve essere racchiusa tra parentesi graffe per indicare che si tratta di una stringa di formato e non di una stringa formale. Il testo non incluso nelle parentesi graffe viene visualizzato come testo formale.
<asp:DataGrid id="DataGrid1" runat="server"> <Columns> <asp:BoundColumn HeaderText="Value" DataField="Field1" DataFormatString="{0:F2}" /> <asp:BoundColumn HeaderText="Date" DataField="Field2" DataFormatString="{0:d}" /> </Columns> </asp:DataGrid>
Nulla vieta peraltro di utilizzare le regole di formattazione viste finora durante il binding dei dati nell'ambito degli altri elementi di una DataGrid (ItemTemplate e affini) e/o in altri controlli quali la DataList o il Repeater.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.