WinForm/C# DevExpress GridControl 实现多列排序

xinggang · 2017年02月09日 · 169 次阅读

首选:我们不讨论 select 的 order by,只讨论用户自定义排序。 默认点击GridControl列标题时只会根据最后点击的那一列进行排序,如果想根据多列排序怎么办?比如先按部门排序,再按科室排序,最后按姓名排序,方法如下: 代码实现:

//排序只需设置列的SortOrder属性即可
private void btnSort_Click(object sender, EventArgs e)
{
    GridView view = gridControl1.MainView as GridView;
    view.Columns["DeptName"].SortOrder = ColumnSortOrder.Descending;
    view.Columns["SectionName"].SortOrder = ColumnSortOrder.Descending;
}

上面的代码是程序员固定写好的,如果要用户自定义操作的话请往后看。

// GridControl用户点击列实现多列排序:
// Step1、禁用列默认排序功能
gridView1.OptionsCustomization.AllowSort = false;

// Step2、利用列标题点击事件,用代码设置排序
        private void GridView1_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left || e.Clicks > 1) return;
            GridView view = sender as GridView;
            if (view.State != GridState.ColumnDown) return;

            GridHitInfo info = view.CalcHitInfo(e.X,e.Y);
            if (info.HitTest == GridHitTest.Column)
            {
                var sort = info.Column.SortOrder;
                ColumnSortOrder newSort;
                switch (sort)
                {
                    case ColumnSortOrder.None:
                        newSort = ColumnSortOrder.Ascending; //原来没有排序的:升序
                        break;
                    case ColumnSortOrder.Ascending:
                        newSort = ColumnSortOrder.Descending; //原来升序的:降序
                        break;
                    case ColumnSortOrder.Descending:
                        newSort = ColumnSortOrder.None; //原来降序的:清除
                        break;
                    default:
                        newSort = ColumnSortOrder.None; //其它:清除
                        break;
                }

                info.Column.SortOrder = newSort; //排序
            }
        }

实现效果和 PB 的 ERP600 一样一样的~喜欢的点赞。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册