2013-05-03 11 views
24

Mam dynamiczny BoundField (dla DetailsView) za pomocą następującego kodu:Jak naprawić format daty w 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); 

Ale jakoś, to nadal pokazuje niewłaściwy format: 2013-04-29T18: 15: 20.270.

W jaki sposób mogę to naprawić, aby wyświetlić "29/04/2013"? Dzięki za pomoc.

+0

Niestety, sugestie były nie działa. Więc zmieniłem BoundField na TemplateField i stworzyłem dynamiczny TemplateField. – iceheaven31

+2

Wiem, że jest stary, ale mam przeczucie, że 'CreateDate' został zdefiniowany jako ciąg, a nie jako" DateTime ". Czy potrafisz zweryfikować? –

+0

Zajrzyj tutaj https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring(vsv.110).aspx –

Odpowiedz

4

Określa typ danych kolumny źródła danych "CreateDate". Upewnij się, że tworzy rzeczywiste pole datetime, a nie coś takiego jak varchar. Jeśli źródło danych jest procedura przechowywana, to całkiem możliwe, że CreateDate jest przetwarzane w celu wytworzenia varchar, aby sformatować datę, jak w przykładzie:

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

Korzystanie CONVERT jak to często zrobić, aby wyniki kwerendy wypełnij wymagania każdego innego kodu, który będzie przetwarzał te wyniki. Styl 126 to format ISO 8601, międzynarodowy standard, który działa z dowolnym ustawieniem języka. Nie wiem, jaka jest twoja branża, ale to było prawdopodobnie zamierzone. Nie chcesz z tym mieszać. Ten styl (126) tworzy ciąg znaków przedstawiający datę w postaci "2013-04-29T18: 15: 20.270", tak jak opisałeś! Jeśli jednak CreateDate został przetworzony w ten sposób, nie ma możliwości, aby twój plik bf1.DataFormatString wyświetlił "29/04/2013". Najpierw należy rozpocząć od kolumny typu datetime w oryginalnym źródle danych SQL, aby bf1 poprawnie ją wykorzystał.Więc po prostu dodać go do kwerendy źródeł danych, i nazywają go pod inną nazwą jak CreateDate2 tak aby nie przeszkadzać cokolwiek innego kodu już zależy CreateDate, tak:

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

Następnie w kodzie, ci” będziesz musiał wiązać BF1 do "CreateDate2" zamiast oryginalnego "CreateDate", tak:

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! Twoja data powinna teraz wyświetlać "29/04/2013"!

+0

Nie byłbym w stanie przetestować tej odpowiedzi teraz, ale jest to jedyna odpowiedź, która zrozumiała moje pytanie (że mój problem jest z pola DYNAMICZNE w kodzie z tyłu, a NIE w MARK-UP). Wciąż wielkie dzięki tobie, proszę pana. – iceheaven31

+0

Nie ma za co! Czy chciałbyś umieścić na nim znacznik wyboru, aby oznaczyć go jako odpowiedź? – ShieldOfSalvation

11

Formatowanie zależy od ustawień kultury serwera. Jeśli używasz en-US kulturę, można użyć Short Date Pattern jak {0:d}

Na przykład, formatuje 6/15/2009 1:45:30 do 6/15/2009

Można sprawdzić więcej formatów od BoundField.DataFormatString

1

Poniższe linki pomogą Ci:

Na stronie projektu po stronie klienta możesz spróbować this: {0: G}

LUB

Można Format convert that datetime wewnątrz zapytania sam z bazy danych:

+1

'{0: G}' to wzór ogólny (długi czas). OP nie chce zobaczyć części godziny .. –

+0

próbowaliście tego: {0: d} –

5

Miałem ten sam problem, tylko muszę pokazać krótki data (bez czasu), ponadto potrzebne były ustawienia wielojęzyczne, więc zależy od języka, pokazuje dd-mm-rrrr lub mm-dd-rrrr.

Wreszcie przy użyciu DataFormatString="{0:d} wszystko działa poprawnie i pokazuje tylko datę z formatem kultury.

+0

dowolny format działa na mnie, gdy uruchamiam go na moim lokalnym przy użyciu bazy danych z serwera, ale kiedy publikuję moją stronę na serwerze, nie wymusza ona formatu. Każdy pomysł, dlaczego? – 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

bardzo proste wystarczy dodać do swojej dziedzinie związanej DataFormatString = "{0: YYYY/MM/DD}"

+0

Mój problem jest związany z kodem, a nie marżą. – iceheaven31