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
对Dev的GridControl/GridView控件进行分组并展开操作