GridControl 实现多列分组并随意排序

Posted Nemo_XP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GridControl 实现多列分组并随意排序相关的知识,希望对你有一定的参考价值。

因为网上Dev的资料并不全面,所以我曾经为GridControl的多列分组发愁良久,甚至认为GridControl一层的分组只能按照一列分组排序并按照它排序,并找到两个折中思路如下:

1.在赋值数据源前,给数据源增加一列如sort,并根据多列分组,并按照想要的顺序排序,之后循环赋值sort,最后设置GridControl的分组排序列为sort即可。

    // 假设BedSort和InpNo两列组合分组才不会有错误的数据重叠(例如1和2的InpNo他们的BedSort都是A)
    var groupSource = m_AdviceSignRecords.GroupBy(q => new  q.BedSort, q.InpNo ).OrderBy(p => p.Key.BedSort).ThenBy(p => p.Key.InpNo).ToList();
    // 得到合并分组并安排后的顺序,赋值给Sort,然后GridControl按Sort分组即可.
    m_AdviceSignRecords.ForEach(q =>
    
        q.Sort = groupSource.FindIndex(s => s.Key.BedSort == q.BedSort && s.Key.InpNo == q.InpNo);
    );

2.把要分组的多列的值按照顺序组合拼装成一个新的列,以此分组(其实和1的思路一样)

    // 假设BedSort和InpNo两列组合分组才不会有错误的数据重叠(例如1和2的InpNo他们的BedSort都是A)
    m_AdviceSignRecords.ForEach(q =>
    
        q.SortStr = q.BedSort+q.InpNo;
    );

--------------------------这里是分割线-----------------------------------------------

然而我发现,Dev是可以实现,多列分组,并且随意排序的。
1.实现多列组合分组

            gvOrderReview.SortInfo.ClearAndAddRange(new[] 
    new GridMergedColumnSortInfo( new[]  gridColumn1, gridColumn2,gridColumn3,// 按照这两列组合分组....
        new[] ColumnSortOrder.Ascending, ColumnSortOrder.DescendingColumnSortOrder.Ascending, ),// 这两列组合分组顺序

    new GridColumnSortInfo(gridColumn10, ColumnSortOrder.Descending)// 二层分组...多层分组
    , 4);

关于分组超全面的官方资料地址:https://docs.devexpress.com/WindowsForms/3500/controls-and-libraries/data-grid/grouping

2.实现按A列分组,按B列排序
场景:A列是Id列,但是我们分组却想按B列Sort列排序。如下即可实现

关于分组排序的资料:https://docs.devexpress.com/WindowsForms/DevExpress.XtraGrid.Columns.GridColumn.FieldNameSortGroup

以上是关于GridControl 实现多列分组并随意排序的主要内容,如果未能解决你的问题,请参考以下文章

dev gridcontrol在分组行(grouprow)中加入checkbox

如何在 SQL 中按多列分组并按日期排序?

对Dev的GridControl/GridView控件进行分组并展开操作

Dev gridcontrol 添加多列按钮

如何将多列附加到一列?

怎样在DEV express gridcontrol 分页?最好能够有具体的代码为例