2013-05-03 6 views
24

Ho un BoundField dinamica (per un DetailsView) con il seguente codice:Come fissare il formato della data in ASP .NET BoundField (DataFormatString)?

BoundField bf1 = new BoundField(); 
bf1.DataField = "CreateDate"; 
bf1.DataFormatString = "{0:dd/MM/yyyy}"; 
bf1.HtmlEncode = false; 
bf1.HeaderText = "Sample Header 2"; 

dv.Fields.Add(bf1); 

Ma in qualche modo, mostra ancora il formato sbagliato: 2013-04-29T18: 15: 20,270.

In che modo è possibile risolvere il problema per mostrare "29/04/2013"? Grazie per l'aiuto.

+0

Purtroppo, i vostri suggerimenti sono stati non funziona. Così ho cambiato il BoundField in un TemplateField e ho creato un TemplateField dinamico. – iceheaven31

+2

So che questo è vecchio, ma ho la sensazione che "CreateDate" sia stato definito come una stringa e non come un "DateTime". Puoi verificare? –

+0

Dai un'occhiata qui https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring(v=vs.110).aspx –

risposta

4

Determinare il tipo di dati della colonna dell'origine dati, "Crea data". Assicurati che stia producendo un vero campo datetime e non qualcosa come un varchar. Se l'origine dati è una stored procedure, è del tutto possibile che CreateDate viene elaborato per produrre un varchar al fine di formattare la data, in questo modo:

SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate 
FROM TableName ... 

Utilizzando CONVERTIRE come questo è spesso fatto per rendere i risultati delle query soddisfare i requisiti di qualunque altro codice sta per elaborare quei risultati. Lo stile 126 è il formato ISO 8601, uno standard internazionale che funziona con qualsiasi impostazione della lingua. Non so quale sia il tuo settore, ma probabilmente era intenzionale. Non vuoi scherzare. Questo stile (126) produce una rappresentazione in formato stringa di una data nel formato '2013-04-29T18: 15: 20.270' proprio come hai riportato tu! Tuttavia, se CreateDate è stato elaborato in questo modo, non è possibile che il tuo bf1.DataFormatString visualizzi invece "29/04/2013". È necessario innanzitutto iniziare con una colonna di tipo datetime nell'origine dati SQL originale per prima cosa per bf1 per consumarlo correttamente.Quindi, solo aggiungerlo alla query di origine dei dati, e lo chiamano con un nome diverso come CreateDate2 in modo da non disturbare qualsiasi altro codice già dipende CreateDate, in questo modo:

SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate, 
     TableName.CreateDate AS CreateDate2 
FROM TableName ... 

Poi, nel codice, è' ll deve legarsi BF1 a "CreateDate2" al posto della "CreateDate" originale, in questo modo:

BoundField bf1 = new BoundField(); 
bf1.DataField = "CreateDate2"; 
bf1.DataFormatString = "{0:dd/MM/yyyy}"; 
bf1.HtmlEncode = false; 
bf1.HeaderText = "Sample Header 2"; 

dv.Fields.Add(bf1); 

Voila! Ora la tua data dovrebbe mostrare "29/04/2013"!

+0

Non sarei in grado di testare questa risposta ora, ma questa è l'unica risposta che ha compreso la mia domanda (che il mio problema è da un campo DINAMICO in code-behind, e NON in MARK-UP). Quindi, ancora un grande grazie a voi signore. – iceheaven31

+0

Prego! Vuoi gentilmente mettere un segno di spunta su di esso per contrassegnarlo come risposta? – ShieldOfSalvation

11

La formattazione dipende dalle impostazioni cultura del server. Se si utilizza en-US cultura, è possibile utilizzare Short Date Pattern come {0:d}

Per esempio, si formatta 6/15/2009 1:45:30 a 6/15/2009

Potete controllare più formati da BoundField.DataFormatString

1

I seguenti link vi aiuteranno a:

Nella pagina di progettazione lato client è possibile provare this: {0: G}

O

È possibile convert that datetime formato all'interno della stessa query dal database:

+1

'{0: G}' è una data generale (lungo tempo) modello. OP non vuole vedere la parte dell'ora .. –

+0

hai provato questo: {0: d} –

32

Si potrebbe aggiungere dataformatstring="{0:M-dd-yyyy} "attributo al campo associato, in questo modo:

<asp:BoundField DataField="Date" HeaderText="Date" DataFormatString="{0:dd-M-yyyy}" /> 

fonte: cant format datetime using dataformatstring

+0

Il mio problema è in code-behind, non in mark-up. – iceheaven31

5

Ho avuto lo stesso problema, solo bisogno di mostrare a breve data (senza tempo), inoltre era necessario avere impostazioni multi-lingua, quindi dipende dalla lingua, mostra gg-mm-aaaa o mm-gg-aaaa.

Infine utilizzando DataFormatString="{0:d}, tutto funziona correttamente e mostra solo la data con formato cultura.

+0

qualsiasi formato funziona su di me quando lo eseguo sul mio locale utilizzando il database dal server, ma quando pubblico la mia pagina sul server, non impone il formato. Qualche idea del perché? – AdorableVB

1
https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 


In The above link you will find the answer 

**C or c** 

    Displays numeric values in currency format. You can specify the number of decimal places. 
    Example: 

Format: {0:C} 
123.456 -> $123.46 

**D or d** 

    Displays integer values in decimal format. You can specify the number of digits. (Although the type is referred to as "decimal", the numbers are formatted as integers.) 
    Example: 
     Format: {0:D} 
    1234 -> 1234 
    Format: {0:D6} 
    1234 -> 0

    **E or e** 
    Displays numeric values in scientific (exponential) format. You can specify the number of decimal places. 
    Example: 
    Format: {0:E} 
    1052.0329112756 -> 1.052033E+003 
    Format: {0:E2} 
    -1052.0329112756 -> -1.05e+003 

**F or f** 
Displays numeric values in fixed format. You can specify the number of decimal places. 
Example: 
Format: {0:F} 
1234.567 -> 1234.57 
Format: {0:F3} 
1234.567 -> 1234.567 

**G or g** 
Displays numeric values in general format (the most compact of either fixed-point or scientific notation). You can specify the number of significant digits. 
Example: 
Format: {0:G} 
-123.456 -> -123.456 
Format: {0:G2} 
-123.456 -> -120 

F or f 
Displays numeric values in fixed format. You can specify the number of decimal places. 
Format: {0:F} 
1234.567 -> 1234.57 
Format: {0:F3} 
1234.567 -> 1234.567 

G or g 
Displays numeric values in general format (the most compact of either fixed-point or scientific notation). You can specify the number of significant digits. 
Format: {0:G} 
-123.456 -> -123.456 
Format: {0:G2} 
-123.456 -> -120 

N or n 
Displays numeric values in number format (including group separators and optional negative sign). You can specify the number of decimal places. 
Format: {0:N} 
1234.567 -> 1,234.57 
Format: {0:N4} 
1234.567 -> 1,234.5670 

P or p 
Displays numeric values in percent format. You can specify the number of decimal places. 
Format: {0:P} 
1 -> 100.00% 
Format: {0:P1} 
.5 -> 50.0% 

R or r 
Displays Single, Double, or BigInteger values in round-trip format. 
Format: {0:R} 
123456789.12345678 -> 123456789.12345678 

X or x 
Displays integer values in hexadecimal format. You can specify the number of digits. 
Format: {0:X} 
255 -> FF 
Format: {0:x4} 
255 -> 00ff 
1

molto semplice basta aggiungere questo al vostro campo associato DataFormatString = "{0: MM/GG /}"

+0

Il mio problema è in code-behind, non in mark-up. – iceheaven31

Problemi correlati