首选:我们不讨论 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 一样一样的~喜欢的点赞。