2013-03-04 28 views
0

我在頁面中有一個帶有gridview的ASP.NET 3.5應用程序。DataFormatString在gridview列中不起作用

我想將其中一列的格式設置爲日期時間。我試過了:

<asp:BoundField DataField="StatusDate" HeaderText="as of" SortExpression="StatusDate" DataFormatString="{0:d}" /> 

問題是無論我做什麼,我的格式都不會改變。我已經嘗試了其他日期格式化字符串(通用,可排序,longdate,列表繼續),但此列的格式不會更改。

我不認爲我做錯了任何事情,但是當我嘗試根據這一列進行排序時,這使我發瘋。由於默認值是將字段格式化爲字符串,因此當按列標題排序時,它不能正確排序。

任何人都看到了這一點,並有一些解決方法?我已經看到有文章提到添加自定義排序方法,但是如果可以的話,我試圖堅持開箱即用的功能。

+0

如果你這樣做{0:dd MM yyyy} – 2013-03-04 17:47:44

+0

嘗試設置'.HtmlEncode = false',雖然說明它應該可以正常工作3.5+而沒有設置該標誌。 – Marc 2013-03-04 17:50:41

+0

@Marc - 已經試過了。沒有骰子。 – Tim 2013-03-04 17:51:29

回答

0

您不能從字符串格式化爲日期時間。

但是,您可以使用以下方法。輸出與使用BoundField基本相同。

<asp:TemplateField HeaderText="as of" SortExpression="StatusDate"> 
    <ItemTemplate> 
     <asp:Literal ID="Literal1" runat="server" 
     Text='<%# string.Format("{0:d}", Convert.ToDateTime(Eval("StatusDate"))) %>'>   
     </asp:Literal> 
    </ItemTemplate> 
</asp:TemplateField> 
0

我其實是有這個問題了幾次,都拿出了以下解決方案。 首先,我將所有數據放在DataTable中進行存儲。其次,我需要特別格式化某些東西的列,我也隱式定義了數據類型。

DataTable table = new DataTable(); 
    table.Columns.Add("decimalNumber").DataType = System.Type.GetType("System.Decimal"); 
    table.Columns.Add("date").DataType = System.Type.GetType("System.DateTime"); 

然後當我把它在GridView

<asp:BoundField DataField="decimalNumber" DataFormatString="{0:C}" /> 
    <asp:BoundField DataField="date" DataFormatString="{0:dd/MM/yyyy}" /> 

,其結果將是這樣的 $ 0.00包裝& 19/11/2014。我希望這有幫助。

0

因爲該列的源的數據類型不是日期時間!

相關問題