[英]WPF double sorting in DataGrid
我对带有重置的IP列进行了自定义排序。 我已经重置其他列
public static void SortHandler(object sender, DataGridSortingEventArgs e)
{
DataGrid dataGrid = sender as DataGrid;
string sortPropertyName = Helpers.GetSortMemberPath(e.Column);
if (!string.IsNullOrEmpty(sortPropertyName))
{
Console.WriteLine(sortPropertyName);
if (sortPropertyName == "Ip")
{
IComparer comparer = null;
e.Handled = true;
if (e.Column.SortDirection.HasValue && e.Column.SortDirection.Value == ListSortDirection.Descending)
{
e.Column.SortDirection = null;
}
else
{
ListSortDirection direction = (e.Column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;
e.Column.SortDirection = direction;
comparer = new SortIPAddress(direction);
}
ListCollectionView lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);
lcv.CustomSort = comparer;
}
// sorting is cleared when the previous state is Descending
if (e.Column.SortDirection.HasValue && e.Column.SortDirection.Value == ListSortDirection.Descending)
{
int index = Helpers.FindSortDescription(dataGrid.Items.SortDescriptions, sortPropertyName);
if (index != -1)
{
e.Column.SortDirection = null;
dataGrid.Items.SortDescriptions.RemoveAt(index);
dataGrid.Items.Refresh();
if ((Keyboard.Modifiers & ModifierKeys.Shift) != ModifierKeys.Shift)
{
dataGrid.Items.SortDescriptions.Clear();
dataGrid.Items.Refresh();
}
// stop the default sort
e.Handled = true;
}
}
}
}
但是如果我使用shift
进行双重排序,则会对IP列重置进行排序。如何解决双重排序? 论坛要求更多详细信息,但我不知道还要添加什么
您可以修改代码以添加排序组吗?
DataG.SortDescriptions.Add(new SortDescription("col1", ListSortDirection.Ascending));
DataG.SortDescriptions.Add(new SortDescription("col2", ListSortDirection.Ascending));
这将按照您所描述的那样进行排序。
如果您的数据来自某个类类型的集合,则添加一个自定义属性,该属性是多个字段的组合...
public class YourClassType
{
public string SomeColumn {get; set;}
public int SomeInt {get; set; }
...
public string SortCombination { get { return SomeColumn + SomeSort; }}
}
然后,在xaml数据网格列中,将“ SortMemberPath”设置为该属性名称。 例如:
SortMemberPath =“ SortCombination”;
无需额外的“帮助程序”来进行排序/双排序...它使用一列作为排序基础。 您甚至可以设置数字格式,以确保根据其内容正确地将其长度设置为正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.