1

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

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

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

问题是无论我做什么,我的格式都不会改变。我已经尝试过其他日期格式字符串(通用、可排序、长日期等),但此列的格式永远不会改变。

我不认为我做错了什么,但是当我尝试根据此列进行排序时,这让我发疯了。因为默认将列格式化为字符串,所以当我按列标题排序时它不能正确排序。

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

4

4 回答 4

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 & 19/11/2014。我希望这有帮助。

于 2014-11-19T19:01:23.770 回答
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>
于 2013-03-04T17:55:19.483 回答
0

问题是您的数据/列的数据类型是字符串。您的 DataFormatString 属性仅适用于日期时间列。这个问题的解决方案可以在这个 SO 答案中找到。

应用于gridview中的boundfields的格式不起作用

于 2014-06-13T11:27:02.517 回答
0

因为该列的源的数据类型不是日期时间!

于 2016-05-18T11:39:01.110 回答