始终在底部使用空值对 DataGridColumn 进行排序
Sort DataGridColumn with null values always at bottom
我希望我的 DataGrid 中的一列总是在末尾使用空值进行排序。
我尝试通过关注 this (part 1) and 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 缓存了比较结果,因此在用户排序时反转排序(并且不要再运行比较)。
你知道怎么做吗?
谢谢!
根据您的代码目前的情况如下 return 1
NullableDateTimeCompare(DateTime.Now, null, -1);
NullableDateTimeCompare(null, DateTime.Now, 1);
这些将 return -1
NullableDateTimeCompare(DateTime.Now, null, 1);
NullableDateTimeCompare(null, DateTime.Now, -1);
但你想要的是 return 1
NullableDateTimeCompare(DateTime.Now, null, -1);
NullableDateTimeCompare(DateTime.Now, null, 1);
和这些 return -1
NullableDateTimeCompare(null, DateTime.Now, 1);
NullableDateTimeCompare(null, DateTime.Now, -1);
要实现这一点,只需 return 函数末尾的 1 或 -1
if (date1.HasValue)
return 1;
return -1;
我正在制作一个简单的项目来与您分享以解释我的问题。我找到了解决方案。
这就像@juharr 的回答,但恰恰相反。
if (date1.HasValue)
return -1;
return 1;
不知道为什么一定是这样,但它确实有效。空值总是在底部。
非常感谢@juharr!
我希望我的 DataGrid 中的一列总是在末尾使用空值进行排序。 我尝试通过关注 this (part 1) and 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 缓存了比较结果,因此在用户排序时反转排序(并且不要再运行比较)。
你知道怎么做吗?
谢谢!
根据您的代码目前的情况如下 return 1
NullableDateTimeCompare(DateTime.Now, null, -1);
NullableDateTimeCompare(null, DateTime.Now, 1);
这些将 return -1
NullableDateTimeCompare(DateTime.Now, null, 1);
NullableDateTimeCompare(null, DateTime.Now, -1);
但你想要的是 return 1
NullableDateTimeCompare(DateTime.Now, null, -1);
NullableDateTimeCompare(DateTime.Now, null, 1);
和这些 return -1
NullableDateTimeCompare(null, DateTime.Now, 1);
NullableDateTimeCompare(null, DateTime.Now, -1);
要实现这一点,只需 return 函数末尾的 1 或 -1
if (date1.HasValue)
return 1;
return -1;
我正在制作一个简单的项目来与您分享以解释我的问题。我找到了解决方案。
这就像@juharr 的回答,但恰恰相反。
if (date1.HasValue)
return -1;
return 1;
不知道为什么一定是这样,但它确实有效。空值总是在底部。
非常感谢@juharr!