2013-05-03 67 views
24

我有一個動態綁定列(對於一個DetailsView)用下面的代碼:如何修復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); 

但不知何故,它仍然顯示的格式錯誤:2013-04-29T18:15:20.270。

任何辦法可以解決這個問題它顯示「29/04/2013」​​呢?謝謝你的幫助。

+0

不幸的是,你的建議是行不通的。所以我將BoundField改爲TemplateField,並創建了一個動態的TemplateField。 – iceheaven31 2013-05-08 10:22:48

+2

我知道這是舊的,但我有一種直覺,認爲'CreateDate'被定義爲一個字符串而不是'DateTime'。你能證實嗎? – 2013-10-13 22:18:45

+0

看看這裏https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring(v=vs.110).aspx – 2016-08-26 18:49:46

回答

4

確定數據源列「CreateDate」的數據類型。確保它正在生成一個實際的日期時間字段,而不是像varchar那樣。如果您的數據源是一個存儲過程,它是完全可能的,CREATEDATE正在處理,以產生一個varchar格式的日期,就像這樣:

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

使用CONVERT這樣經常做可以使查詢結果填寫任何其他代碼將要處理這些結果的要求。風格126是ISO 8601格式,可用於任何語言設置的國際標準。我不知道你的行業是什麼,但那可能是故意的。你不想惹它。這種風格(126)就像您報告的那樣以'2013-04-29T18:15:20.270'的形式生成日期的字符串表示形式!但是,如果CreateDate以這種方式進行處理,則無法讓您的bf1.DataFormatString顯示「29/04/2013」​​。您必須首先從原始SQL數據源中的日期時間類型列開始,以便bf1正確使用它。因此,只需將其添加到數據源的查詢,並通過不同的名稱,如CreateDate2調用它,以免打擾任何其他代碼已經依賴於CREATEDATE,像這樣:

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

然後,在你的代碼,你」將不得不綁定BF1的原 「CREATEDATE」 到 「CreateDate2」 代替,像這樣:

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); 

瞧!你的日期現在應該顯示「29/04/2013」​​,而不是!

+0

我現在無法測試這個答案,但這是理解我的問題的唯一答案(即我的問題來自代碼隱藏的動態字段,而不是標記)。所以,還是非常感謝你的先生。 – iceheaven31 2017-10-09 07:34:59

+0

不客氣!您是否願意在它上面打勾並將其標記爲答案? – ShieldOfSalvation 2017-10-10 12:58:33

1

下面的鏈接將幫助你:

在客戶端設計頁面,您可以嘗試this:{0:綠}

OR

您可以查詢本身從數據庫中convert that datetime格式:

+1

'{0:G}'是一般日期(長時間)模式。 OP不希望看到小時部分.. – 2013-05-03 11:27:56

+0

是你試過這個:{0:d} – 2013-05-03 11:38:42

32

您可以添加dataformatstring="{0:M-dd-yyyy}「屬性綁定字段,就像這樣:

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

來源: cant format datetime using dataformatstring

+0

我的問題是在代碼隱藏,而不是在標記。 – iceheaven31 2017-10-09 07:35:45

5

我有同樣的問題,只需要顯示短日期(無時間),而且它需要有多國語言設置,所以依賴於語言,展現DD-MM-yyyy或MM-DD-YYYY的。

最後使用DataFormatString="{0:d},一切工作正常,僅顯示與文化的日期格式。

+0

當我在服務器上使用數據庫在本地運行它時,任何格式都適用於我,但是當我在服務器上發佈我的頁面時,它不會強制格式化。任何想法爲什麼? – AdorableVB 2017-09-21 02:26:32

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

非常簡單隻需添加到您的綁定字段 DataFormatString = 「{0:YYYY/MM/DD}」

+0

我的問題是代碼隱藏,而不是標記。 – iceheaven31 2017-10-09 07:36:09