5

カスタムソートが実装された 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));

このシナリオを行う方法はありますか、またはロックされたレコードを手動で削除してから追加する必要がありますか? 提案してください..

4

1 に答える 1

0

上手。これはコードから実現できます。

仮定しましょう

The page size         = 10 

Current page          = 2

Collection name       = myItems

First Item to display = initialItem

Last Item to display  = lastItem

手順:

  • コレクションを並べ替える
  • コレクションから9〜16アイテム(8アイテム)を取り出します(2ページ目にいるため)

最初のアイテム番号=8x(現在のページ番号-1)+1最後のアイテム

番号=8x現在のページ番号

それで:

初期アイテム番号=8x(2-1)+ 1 = 9

最後のアイテム番号=8x 2 = 16

(これで、ソートされた8つのアイテムのサブコレクションができました)

  • サブコレクションの先頭にintialItemを追加します

myItems.Insert(0、initialItem);

  • サブコレクションの最後にlastItemを追加します

    myItems.Insert(9、lastItem);

于 2013-03-06T07:07:45.953 に答える