Сортировка преобразованной строки в столбец DateTime. - PullRequest
0 голосов
/ 17 сентября 2018

My 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;
        }


    }

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Установите для свойства SortMemberPath DataGridColumn значение «Дата», если это то, что называется вашим столбцом / свойством даты. Затем следует отсортировать столбец по этому свойству независимо от форматирования.

Но вам не нужно использовать конвертер для форматирования даты. Вы можете просто установить свойство StringFormat привязки:

if (e.PropertyName.Contains("Date"))
{
    DataGridTextColumn dgtc = e.Column as DataGridTextColumn;
    dgtc.Binding = new Binding(e.PropertyName) { StringFormat = "yyyy-MM-dd" };
}
0 голосов
/ 18 сентября 2018

вы пробовали

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 для последующих проходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...