【问题标题】:How to disable specific column Sorting in Datagrid?如何禁用 Datagrid 中的特定列排序?
【发布时间】:2018-09-07 23:30:33
【问题描述】:

在 winforms .Net Framework 1.1 中,有什么方法可以禁用对数据网格中特定列的排序。

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

this.dataGrid1.AllowSorting = false;

【问题讨论】:

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


    【解决方案1】:

    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控件了:

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

    【讨论】:

    • 将解决方案更改为不使用AllowSorting。
    • 如何获取数据网格中的当前点击区域列索引?
    • DataGrid.HitTest 方法。
    【解决方案2】:

    你可以按列号设置如下,

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

    【讨论】:

    • 在 .net 1.1 中。没有 DatagridView 控件。我需要禁用 Datagrid 中的特定列排序。
    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2019-12-03
    • 2018-04-29
    • 2020-07-18
    相关资源
    最近更新 更多