2013-02-26 93 views
5

我有一個WPF Datagrid與自定義排序實施,它工作正常。我需要將集合中的一些記錄鎖定到頂部和底部(頂部鎖定和底部鎖定)。所以當一個特定的記錄被頂部鎖定時,它應該是集合中的第一條記錄,而不管所選列的值如何(即我不想對那些頂部鎖定和底部鎖定的行進行排序)。這是我的自定義排序方法。WPF DataGrid自定義排序鎖定了一些記錄

private void PerformLineCustomSort(DataGridColumn column) 
     { 
      ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending; 
      column.SortDirection = direction; 
      ListCollectionView listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(Lines); 

      LineSorter lineSort = new LineSorter(direction, column); 
      listCollectionView.CustomSort = lineSort; 

     } 

其中LineSorter是我的自定義分類器類的IComparer實施。這工作正常。現在我想將頂部鎖和底部鎖應用於ListCollectionView。我已經嘗試了以上代碼,但它沒有任何更改(即,列表僅基於自定義排序列進行排序)。

listCollectionView.SortDescriptions.Add(new SortDescription("TopLock", ListSortDirection.Descending)); 
listCollectionView.SortDescriptions.Add(new SortDescription("BotLock", ListSortDirection.Ascending)); 

有沒有辦法做這種情況下,還是我需要手動刪除,然後添加鎖定的記錄。請建議..

+1

你可以創建三個不同的集合和聯合它。一個集合將有頂級鎖,第二個有底部鎖,第三個集合將有所有元素休息。 – 2013-02-26 08:44:33

+3

將您的'LineSorter.Compare()'實現更改爲始終返回頂部鎖定項目的數量小於其他項目,並將底部鎖定項目的數量大於其他項目。我假設有一個原因,你不能這樣做,但? – 2013-02-26 08:59:47

回答

0

好吧。你可以通過你的代碼來做到這一點。

Let'a承擔

The page size   = 10 

Current page   = 2 

Collection name  = myItems 

First Item to display = initialItem 

Last Item to display = lastItem 

步驟:

  • 分類收集
  • 從集合 以9〜16個項目(8個項目)(因爲你是在第二頁)

初始項目數= 8×(當前頁號-1)+ 1的最後一個項目

數= 8×當前頁號

所以:

初始項目數= 8 x(2 - 1)+ 1 = 9

最後一件商品編號= 8 x 2 = 16

(現在你有8個項目子集合被排序)

  • 添加intialItem的子集的首要

myItems.Insert(0,initialItem);

  • 添加lastItem到副收集

    myItems.Insert(9,lastItem)的端部;