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 原创,转载不究!