DataFormatString在gridview列中不工作

本文关键字:工作 gridview DataFormatString | 更新日期: 2023-09-27 18:02:14

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

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

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

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

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

有人看到这个并有一些变通方法吗?我已经看到一些文章提到添加自定义排序方法,但如果可以的话,我将尝试坚持使用开箱即用的功能。

DataFormatString在gridview列中不工作

我实际上遇到过这个问题几次,并提出了以下解决方案。首先,我将所有的数据放在一个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

不能从字符串中格式化为日期时间。

但是,您可以使用以下方法。输出与使用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>

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

应用于gridview边界字段的格式不工作

因为该列的源数据类型不是datetime!