【问题标题】:Sorting a converted String to DateTime column.将转换后的字符串排序为 DateTime 列。
【发布时间】:2019-02-21 19:50:21
【问题描述】:

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


    }

【问题讨论】:

  • 在您看来,您的绑定是什么样的?
  • 您将字符串解析为 DateTime,然后将其转换为字符串。将其保留为日期时间。然后,您可以选择它在显示时的格式。或者只是让它使用默认格式...如果您不是美国人,这意味着您需要两行语言环境技巧(所有 WPF 应用程序默认为 en-US 语言环境,无论您的机器设置是什么)。
  • 这些日期的文化信息是否可用?

标签: c# wpf sorting datetime datatable


【解决方案1】:

如果这是您的日期列/属性的名称,请将DataGridColumnSortMemberPath 属性设置为“日期”。然后无论格式如何,它都应该按此属性对列进行排序。

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

if (e.PropertyName.Contains("Date"))
{
    DataGridTextColumn dgtc = e.Column as DataGridTextColumn;
    dgtc.Binding = new Binding(e.PropertyName) { StringFormat = "yyyy-MM-dd" };
}

【讨论】:

    【解决方案2】:

    你试过了吗

    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 进行后续传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-31
      • 2017-08-29
      • 2021-03-31
      • 2011-10-16
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多