確定數據源列「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」,而不是!
不幸的是,你的建議是行不通的。所以我將BoundField改爲TemplateField,並創建了一個動態的TemplateField。 – iceheaven31 2013-05-08 10:22:48
我知道這是舊的,但我有一種直覺,認爲'CreateDate'被定義爲一個字符串而不是'DateTime'。你能證實嗎? – 2013-10-13 22:18:45
看看這裏https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring(v=vs.110).aspx – 2016-08-26 18:49:46