WPF DataGrid 自定义排序并锁定了一些记录

标签 wpf c#-4.0 wpfdatagrid listcollectionview

我有一个实现了自定义排序的 WPF Datagrid,它工作正常。我需要将集合中的一些记录锁定到顶部和底部(Top Lock 和Bottom Lock)。因此,当特定记录被顶部锁定时,它应该是集合中的第一条记录,而不管所选列的任何值(即我不想对顶部锁定和底部锁定的行进行排序)。这是我的自定义排序方法。

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));

有什么办法可以做到这种情况,还是我需要手动删除然后添加锁定的记录。请建议..

最佳答案

好。您可以通过代码实现这一点。
让我们假设

The page size         = 10 

Current page          = 2

Collection name       = myItems

First Item to display = initialItem

Last Item to display  = lastItem

脚步:
  • 整理收藏
  • 从集合中取出 9 到 16 项(8 项)
    (因为你在第二页)

  • initial item number = 8 x (Current page number -1) + 1 last item

    number = 8 x current page number


    所以:

    initial item number = 8 x (2 - 1) + 1 = 9

    last item number = 8 x 2 = 16


    (现在您有 8 个已排序项目的子集合)
  • 将 intialItem 添加到子集合的顶部

  • myItems.Insert(0, initialItem);
  • 将 lastItem 添加到子集合的末尾
    myItems.Insert(9, lastItem );
  • 关于WPF DataGrid 自定义排序并锁定了一些记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084034/

    相关文章:

    c# - 从 ListView 排序中排除项目

    asp.net - Visual Studio 2012 中的远程调试

    Wpf DataGrid ClipboardCopyMode ="IncludeHeader"带有自定义 header

    WPF DataGrid 最佳实践?

    c# - C# 中的数字文本框 - WPF

    wpf - WPF 中的负边距

    c# - 如何在 VS WPF 设计面板中显示集合数据?

    c# - 在单行语句中删除包含某个单词/字符串的数组中的元素

    c# - 从同一 IIS 中的另一个网站访问网站文件夹

    wpf - 如何确定 WPF DataGrid 是否处于编辑模式?