DataFormatString在gridview列中不起作用

时间:2013-03-04 17:45:52

标签: c# asp.net

我有一个ASP.NET 3.5应用程序,页面中有一个gridview。

我想将其中一列格式化为日期时间。我试过了:

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

问题是无论我做什么,我的格式永远不会改变。我已经尝试了其他日期格式化字符串(一般,可排序,longdate,列表继续),但此列的格式永远不会更改。

我不认为我做错了什么,但是当我尝试根据这个专栏进行排序时,这让我很疯狂。由于默认情况下将列格式化为字符串,因此在按列标题排序时,它无法正确排序。

有人看过这个并有某种解决方法吗?我已经看过提到添加自定义排序方法的文章,但是如果可以的话,我正试图坚持开箱即用的功能。

4 个答案:

答案 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!