我的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;
}
}
你有没有尝试过
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
进行后续传递。
如果这是您的日期列/属性被调用,请将SortMemberPath
的DataGridColumn
属性设置为“Date”。然后它应该通过此属性对列进行排序,而不管格式如何。
但是您不需要使用转换器来格式化日期。你可以设置绑定的StringFormat
属性:
if (e.PropertyName.Contains("Date"))
{
DataGridTextColumn dgtc = e.Column as DataGridTextColumn;
dgtc.Binding = new Binding(e.PropertyName) { StringFormat = "yyyy-MM-dd" };
}