WinForm/C# GridControl 实现多列排序

xinggang · 2016年12月14日 · 263 次阅读

DevExpress 中 GridControl 默认点击列标题会进行排序,但这样同时只能按一列排序,研究了下找到一种方法可以实现多列排序。
1、禁用 GridControl 排序功能

gridView1.OptionsCustomization.AllowSort = false;

2、为 GridControl 注册鼠标点击事件,判断如果在列标题上则用代码排序

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 的排序效果一样。 本文 XG 原创,转载不究!

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