簡體   English   中英

WPF 使用重置對 DataGrid 進行排序

[英]WPF sorting DataGrid with reset

我的 DataGrid 有自定義排序

if (sortPropertyName == "Ip")
{   
     IComparer comparer = null;                    
     e.Handled = true;
     ListSortDirection direction = (e.Column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;         
     e.Column.SortDirection = direction;         
     ListCollectionView lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);                     
     comparer = new SortIPAddress(direction);                   
     lcv.CustomSort = comparer;
}

它運作良好。 我有其他列的方法重置排序

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;
         // remove the sort description
         dataGrid.Items.SortDescriptions.RemoveAt(index);
         dataGrid.Items.Refresh();

         if ((Keyboard.Modifiers & ModifierKeys.Shift) != ModifierKeys.Shift)
         {
           // clear any other sort descriptions for the multisorting case
           dataGrid.Items.SortDescriptions.Clear();
           dataGrid.Items.Refresh();
         }

         // stop the default sort
         e.Handled = true;
     }
}

我怎樣才能像 Ip 列那樣重置?

我做了:

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;

排序 Ip 現在重置。 但是使用shift雙重排序是不正確的。 怎么修?

您可以通過將SortDirection屬性設置為null來清除列的排序:

e.Column.SortDirection = null;

如果要刪除自定義排序,可以將CustomSort屬性設置為null

ListCollectionView lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(dg.ItemsSource);
lcv.CustomSort = null;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM