代码之家  ›  专栏  ›  技术社区  ›  Vignesh Nethaji

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

  •  3
  • Vignesh Nethaji  · 技术社区  · 6 年前

    在winforms中。Net Framework 1.1,是否有任何方法可以禁用datagrid中特定列的排序。

    如果我尝试将Allow sorting设置为false,那么它会禁用所有列中的排序。但我需要禁用datagrid中的特定列。

    this.dataGrid1.AllowSorting = false;
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Reza Aghaei    4 年前

    DataGrid 控件没有单独控制列排序的属性。您可以通过设置 AllowSorting

    但在调查 source code of the control ,控件通过处理鼠标向上移动来执行排序,通过点击测试来检查鼠标是否向上移动(如果发生在列标题上)。因此,要自定义行为,可以重写 OnMouseUp 并通过传递虚假的鼠标事件参数来愚弄基方法:

    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 检查那些可排序/不可排序的列索引。

        2
  •  0
  •   Abhilash Ravindran C K    6 年前

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

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