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}" />
问题是无论我做什么,我的格式永远不会改变。我已经尝试过其他日期格式字符串(一般、可排序、长日期等),但这一列的格式从未改变。
我不认为我做错了什么,但是当我试图根据这一列进行排序时,这让我发疯了。因为默认是将列格式化为字符串,所以当我按列标题排序时,它不会正确排序。
有人看到这个并有一些变通方法吗?我已经看到一些文章提到添加自定义排序方法,但如果可以的话,我将尝试坚持使用开箱即用的功能。
我实际上遇到过这个问题几次,并提出了以下解决方案。首先,我将所有的数据放在一个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!