Sum*_*osh 6 c# datatable dataview datetime
我想在C#中对DataView进行排序.似乎DataView Class的Sort方法将日期作为字符串.
在输出我得到这个 -
5/9/2013 4:56:38 PM
5/8/2013 4:23:06 PM
5/8/2013 1:38:21 PM
5/7/2013 9:55:30 PM
5/7/2013 7:54:45 PM
5/7/2013 7:44:10 PM
5/7/2013 7:44:10 PM
5/7/2013 12:26:38 PM
5/7/2013 1:44:06 PM
5/6/2013 4:08:54 PM
5/6/2013 10:32:49 AM
5/4/2013 7:54:23 PM
5/4/2013 12:57:21 PM
5/3/2013 3:49:03 PM
5/3/2013 3:49:03 PM
5/3/2013 2:06:12 PM
5/3/2013 11:19:34 AM
5/3/2013 11:03:32 AM
5/3/2013 1:58:38 PM
5/2/2013 7:27:55 PM
5/2/2013 7:17:50 PM
5/2/2013 7:06:06 PM
5/2/2013 6:42:37 PM
5/2/2013 6:30:58 PM
5/13/2013 12:49:24 PM
Run Code Online (Sandbox Code Playgroud)
这是我的代码.
DataTable dt;
DataView dv = dt.DefaultView;
dv.Sort = "MessageDate desc";
DataTable sortedDT = dv.ToTable();
foreach (DataRow row in sortedDT.Rows)
{
code to print.
}
Run Code Online (Sandbox Code Playgroud)
你可以看到最后一个日期5/13/2013应该是第一个而不是底部为5/13> 5/9如果它是一个日期比较,但是5/13 <5/9如果你把它作为一个串.
MessageDate Column是我的声明中的datetime,仍然是编译器将其转换为String.
public struct Messages
{
public string ProfileId { get; set; }
public string Network { get; set; }
public string FromId { get; set; }
public string FromName { get; set; }
public string FromProfileUrl { get; set; }
public DateTime MessageDate { get; set; }
public string Message { get; set; }
public string FbComment { get; set; }
public string FbLike { get; set; }
public string MessageId { get; set; }
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会发生这种情况以及如何解决这个问题?
您需要实现IComparable排序依据DateTime:
http://forums.asp.net/p/1267353/2393006.aspx
或者,如果您可以更改结构,则可以添加排序值:
public string SortValue
{
get
{
return ((int)((MessageDate - new DateTime(1970, 1, 1)).TotalSeconds)).ToString("D12");
}
}
Run Code Online (Sandbox Code Playgroud)
它将 MessageDate 转换为自纪元以来的秒数值,然后可以按字典顺序排序。
| 归档时间: |
|
| 查看次数: |
5829 次 |
| 最近记录: |