如何禁用Datagrid中的特定列排序?

时间:2018-03-29 05:35:14

标签: c# .net winforms datagrid .net-1.1

在winforms .Net Framework 1.1中,有没有办法禁用数据网格中特定列的排序。

如果我尝试将Allow sorting设置为false,则禁用所有列中的排序。但我需要在数据网格中禁用特定列。

this.dataGrid1.AllowSorting = false;

2 个答案:

答案 0 :(得分:1)

DataGrid控件没有用于分别控制列排序的属性。您可以通过设置AllowSorting来允许或禁止对所有列进行排序。

但是知道控件通过处理鼠标来执行排序,通过命中测试检查鼠标是否发生在列标题上,你可以覆盖OnMouseUp并通过传递假鼠标事件来欺骗基本方法ARGS:

public class MyDataGrid : DataGrid
{
    protected override void OnMouseUp(MouseEventArgs e)
    {
        var hti = HitTest(e.X, e.Y);
        var newArgs = new MouseEventArgs(e.Button, e.Clicks, -1, -1, e.Delta);
        if (hti.Type == HitTestType.ColumnHeader && hti.Column == 0)
            base.OnMouseUp(newArgs);
        else
            base.OnMouseUp(e);
    }
}

然后您可以在表单上使用MyDataGrid控件:

enter image description here

您可以增强代码示例并添加属性以包含可排序或不可排序的属性列表,而不是hti.Column == 0检查那些可排序/不可排序的列索引。

答案 1 :(得分:0)

您可以按列号设置,如下所示,

// Make fourth column not sortable
dataGridView1.Columns[3].SortMode = DataGridViewColumnSortMode.NotSortable;