我有一个ASP.NET 3.5应用程序,页面中有一个gridview。
我想将其中一列格式化为日期时间。我试过了:
<asp:BoundField DataField="StatusDate" HeaderText="as of" SortExpression="StatusDate" DataFormatString="{0:d}" />
问题是无论我做什么,我的格式永远不会改变。我已经尝试了其他日期格式化字符串(一般,可排序,longdate,列表继续),但此列的格式永远不会更改。
我不认为我做错了什么,但是当我尝试根据这个专栏进行排序时,这让我很疯狂。由于默认情况下将列格式化为字符串,因此在按列标题排序时,它无法正确排序。
有人看过这个并有某种解决方法吗?我已经看过提到添加自定义排序方法的文章,但是如果可以的话,我正试图坚持开箱即用的功能。
答案 0 :(得分:2)
我实际上已经有过几次这个问题,并提出了以下解决方案。 首先,我将所有数据放在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&amp; 19/11/2014 的。我希望这会有所帮助。
答案 1 :(得分: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>
答案 2 :(得分:0)
问题是数据/列的数据类型是字符串。您的DataFormatString属性仅适用于datetime列。这个问题的解决方案可以在这个SO答案中找到。
Formatting applied to boundfields in gridview is not working
答案 3 :(得分:0)
因为该列源的数据类型不是datetime!