我的DataTable有一个Date列,该列必须接受几种不同的DateTime格式。我想将这些合并为一种形式,然后按日期进行相应排序。
到目前为止,我已经编写了以下代码来更改日期的显示方式。但是它仍然不能正确排序。显示的内容不是排序时使用的内容。它仍然使用旧格式。
因此2018-05-30仍会在2018-09-05之后,因为系统正在读取数据,然后将其转换为30/05/2018和05/09/2018。并且由于30> 05,因此排序不正确。有人有建议吗?
if (e.PropertyName.Contains("Date"))
{
DataGridTextColumn dgtc = e.Column as DataGridTextColumn;
DateTimeConverter con = new DateTimeConverter();
(dgtc.Binding as Binding).Converter = con;
}
public class DateTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
try
{
return DateTime.Parse(value.ToString()).ToString("yyyy-MM-dd");
}
catch
{
return value;
}
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && value.GetType() == typeof(System.DateTime))
{
DateTime t = (DateTime)value;
return t.ToShortDateString();
}
return value;
}
}
答案 0 :(得分:0)
您尝试过
List<DateTime> yourdateTime = new List<DateTime>();
yourdateTime.OrderBy(x => x.Date);
也看看
yourdateTime.OrderBy(x => x.Date.TimeOfDay)
.ThenBy(x => x.Date.Date)
.ThenBy(x => x.Date.Year);
一旦进入Date Class
,您就有很多方法对其进行排序。只需确保是否使用多个来首先使用OrderBy
,然后使用ThenBy
进行后续遍历。
答案 1 :(得分:0)
如果要调用日期列/属性,请将SortMemberPath
的{{1}}属性设置为“日期”。然后,无论格式如何,都应按此属性对列进行排序。
但是您不需要使用转换器来格式化日期。您可以只设置绑定的DataGridColumn
属性:
StringFormat