2013-05-03 12 views
24

Ich habe eine dynamische Boundfield (für ein Detail) mit dem folgenden Code:So beheben Sie das Datumsformat 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); 

Aber irgendwie, es zeigt immer noch das falsche Format: 2013-04-29T18: 15: 20,270.

Irgendwie könnte ich reparieren, damit stattdessen "29/04/2013" angezeigt wird? Danke für Ihre Hilfe.

+0

Leider waren Ihre Vorschläge nicht funktioniert. Also habe ich das BoundField in ein TemplateField geändert und stattdessen ein dynamisches TemplateField erstellt. – iceheaven31

+2

Ich weiß, das ist alt, aber ich habe das Gefühl, dass 'CreateDate' als String definiert wurde und nicht als' DateTime'. Können Sie das verifizieren? –

+0

Werfen Sie einen Blick hier https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring(v=vs.110).aspx –

Antwort

4

Ermitteln Sie den Datentyp Ihrer Datenquellenspalte "CreateDate". Stellen Sie sicher, dass es ein tatsächliches Datetime-Feld und nicht etwas wie ein Varchar erzeugt. Wenn Ihre Datenquelle eine gespeicherte Prozedur ist, ist es durchaus möglich, dass ErstellDat verarbeitet wird, um eine varchar zu erzeugen, um das Datum zu formatieren, etwa so:

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

Convert wie dies oft getan, um die Abfrageergebnisse zu machen füllen Sie die Anforderungen des anderen Codes, der diese Ergebnisse verarbeiten wird. Stil 126 ist ISO 8601-Format, ein internationaler Standard, der mit jeder Spracheinstellung funktioniert. Ich weiß nicht, was Ihre Branche ist, aber das war wahrscheinlich beabsichtigt. Du willst dich nicht damit anlegen. Dieser Stil (126) erzeugt eine Zeichenfolgendarstellung eines Datums in der Form '2013-04-29T18: 15: 20.270' genau wie Sie es gemeldet haben! Wenn CreateDate jedoch auf diese Weise verarbeitet wurde, können Sie auf keinen Fall Ihren bf1.DataFormatString stattdessen "29/04/2013" anzeigen lassen. Sie müssen zuerst in der ursprünglichen SQL-Datenquelle mit einer Datetime-Typspalte beginnen, damit bf1 sie korrekt konsumiert.So fügen Sie einfach es an die Datenquelle Abfrage, und nennen Sie es unter einem anderen Namen wie CreateDate2, um nicht zu stören, was anderer Code bereits auf ErstellDat abhängt, wie folgt aus:

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

Dann in Ihrem Code, Sie‘

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: statt der ursprünglichen "ErstellDat" auf "CreateDate2", wie so ll haben bf1 zu binden! Ihr Datum sollte stattdessen "29/04/2013" anzeigen!

+0

Ich könnte diese Antwort jetzt nicht testen, aber das ist die einzige Antwort, die meine Frage verstanden hat (dass mein Problem von einem DYNAMISCHEN Feld in Code-behind und NICHT in MARK-UP ist). Also noch ein großes Dankeschön an Sie, Sir. – iceheaven31

+0

Gern geschehen! Würden Sie bitte ein Häkchen setzen, um es als Antwort zu markieren? – ShieldOfSalvation

11

Die Formatierung hängt von der Kultureinstellung des Servers ab. Wenn Sie en-US Kultur verwenden, können Sie Short Date Pattern wie {0:d}

Zum Beispiel verwenden, es formatiert 6/15/2009 1:45:30 zu 6/15/2009

können Sie mehr Formate check von BoundField.DataFormatString

1

Die folgenden Verbindungen werden Ihnen helfen:

In der Client-Designseite können Sie versuchen this: {0: G}

ODER

Sie können convert that datetime Format innerhalb der Abfrage selbst aus der Datenbank:

+1

'{0: G}' ist ein allgemeines Datum (lange Zeit) Muster. OP möchte nicht die Stunde Teil sehen .. –

+0

sind Sie versucht dies: {0: d} –

5

Ich hatte das gleiche Problem, nur kurz zu zeigen Datum (ohne die Zeit), außerdem war es notwendig, mehrsprachige Einstellungen zu haben, hängt also von der Sprache ab, zeige dd-mm-yyyy oder mm-dd-yyyy.

Schließlich mit DataFormatString="{0:d}, alles funktioniert gut und zeigen nur das Datum mit Kultur-Format.

+0

jedes Format funktioniert bei mir, wenn ich es auf meinem lokalen mit der Datenbank vom Server ausführen, aber wenn ich meine Seite auf dem Server veröffentlichen, erzwingt es nicht das Format. Irgendeine Idee warum? – 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

sehr einfach nur diese Dataformatstring = auf Ihr gebundenes Feld hinzufügen "{0: yyyy/MM/dd}"

+0

Mein Problem ist in Code-Behind, nicht in Mark-up. – iceheaven31

Verwandte Themen