将转换后的String排序为DateTime列。

问题描述 投票:0回答:2

我的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;
        }


    }
c# wpf sorting datetime datatable
2个回答
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进行后续传递。


0
投票

如果这是您的日期列/属性被调用,请将SortMemberPathDataGridColumn属性设置为“Date”。然后它应该通过此属性对列进行排序,而不管格式如何。

但是您不需要使用转换器来格式化日期。你可以设置绑定的StringFormat属性:

if (e.PropertyName.Contains("Date"))
{
    DataGridTextColumn dgtc = e.Column as DataGridTextColumn;
    dgtc.Binding = new Binding(e.PropertyName) { StringFormat = "yyyy-MM-dd" };
}
© www.soinside.com 2019 - 2024. All rights reserved.