gpt4 book ai didi

c# - 对十进制类型的列进行排序? WPF DataGrid 中的(可为空)

转载 作者:行者123 更新时间:2023-11-30 13:31:40 24 4
gpt4 key购买 nike

我正在使用 WPF 中的 DataGrid 和多个 decimal 列。我最近将绑定(bind)属性更改为 decimal?,现在无法通过单击标题对这些列进行排序(就像我的其他列一样)。但是,我仍然可以使用代码隐藏中的方法对它们进行排序。有谁知道是否可以通过单击标题对 decimal? 列进行排序,或者如果不可能的话背后的原因是什么?这是我的相关代码:

几个有问题的列(属性附加到 DataGrid 的行为。启用/禁用行为没有区别):

[Column("PPAvg", 7)]
public decimal? ProjectedPointsAvg { get; set; }

[Column("PPHi", 8)]
public decimal? ProjectedPointsHi { get; set; }

[Column("PPLo", 9)]
public decimal? ProjectedPointsLo { get; set; }

DataGrid 本身:

<DataGrid x:Name="poolDataGrid"
Grid.Row="1"
CanUserAddRows="False"
IsReadOnly="True"
MouseDoubleClick="poolDataGrid_MouseDoubleClick">
<i:Interaction.Behaviors>
<local:ColumnHeaderBehavior />
</i:Interaction.Behaviors>
</DataGrid>

我仍然可以使用如下代码通过代码隐藏进行排序:

var col = poolDataGrid.Columns.SingleOrDefault(c => c is DataGridTextColumn && c.Header.ToString() == "PPHi");
poolDataGrid.Items.SortDescriptions.Add(new SortDescription(col.SortMemberPath, ListSortDirection.Descending));

不幸的是,我没有太多要补充的了。如果有人可以帮助我解决这个问题,我将不胜感激。

最佳答案

DataGridColumn.CreateDefaultColumn(ItemPropertyInfo) 测试 IComparable 的 PropertyType并为可为 null 的类型将 CanUserSort 设置为 false。

为可空基元在自动生成的列上启用标准排序:

void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (!e.Column.CanUserSort)
{
Type type = e.PropertyType;
if (type.IsGenericType && type.IsValueType && typeof(IComparable).IsAssignableFrom(type.GetGenericArguments()[0]))
{
// allow nullable primitives to be sorted
Debug.Assert(type.Name == "Nullable`1");
e.Column.CanUserSort = true;
}
}
}

这(至少)适用于可为空的原始类型。

关于c# - 对十进制类型的列进行排序? WPF DataGrid 中的(可为空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19277308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com