对DataGridColumn进行排序,其值始终位于底部

时间:2015-01-08 15:17:26

标签: c# wpf sorting datagrid compare

我希望我的DataGrid中的列总是在结尾处使用空值进行排序。 我尝试按照this (part 1)this (part 2)执行此操作。但我的自定义排序不能像我想的那样工作。

这是我的专栏的比较方法:

private int NullableDateTimeCompare(DateTime? date1, DateTime? date2, int direction)
{
    if (date1.HasValue && date2.HasValue)
        return DateTime.Compare(date1.Value, date2.Value)*direction;
    if (!date1.HasValue && !date2.HasValue)
        return 0;
    if (date1.HasValue)
        return 1 * -direction; // Tried different things but nothing work like I will
    return -1 * -direction; // Tried different things but nothing work like I will
}

我的印象是这不起作用,因为DataGrid缓存了比较结果,因此在用户排序时反转排序(并且不再运行比较)。

您对如何做到了吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

当您编码当前时,以下内容将返回1

NullableDateTimeCompare(DateTime.Now, null, -1);
NullableDateTimeCompare(null, DateTime.Now, 1);

这些将返回-1

NullableDateTimeCompare(DateTime.Now, null, 1);
NullableDateTimeCompare(null, DateTime.Now, -1);

但你想要的是返回1

NullableDateTimeCompare(DateTime.Now, null, -1);
NullableDateTimeCompare(DateTime.Now, null, 1);

并返回-1

NullableDateTimeCompare(null, DateTime.Now, 1);
NullableDateTimeCompare(null, DateTime.Now, -1);

要实现这一点,只需在函数末尾返回1或-1

if (date1.HasValue)
    return 1;
return -1;

答案 1 :(得分:0)

我正在制作一个简单的项目与您分享以解释我的问题。我找到了解决方案。

这就像@juharr的回答,但相反。

if (date1.HasValue)
    return -1;
return 1;

不知道为什么它必须像那样但它有效。空位总是在底部。

非常感谢@juharr!