对数据网格列进行排序,空值始终位于底部
本文关键字:空值 于底部 排序 数据网 数据 网格 | 更新日期: 2023-09-27 18:36:42
我希望我的 DataGrid 中的一列始终以空值排序。我试图通过遵循这个(第 1 部分)和这个(第 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 缓存了比较结果,因此在用户排序时反转排序(并且不要在比较时再次运行)。
你知道如何做到这一点吗?
谢谢 !
按照您当前的代码,以下内容将返回 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;
我正在制作一个简单的项目与您分享以解释我的问题。我找到了解决方案。
这就像@juharr答案,但反过来。
if (date1.HasValue)
return -1;
return 1;
不知道为什么它一定是那样的,但它有效。空值始终位于底部。
所以感谢@juharr!