C# 如何在DataGridView中禁用排序?

C# 如何在DataGridView中禁用排序?,c#,.net,winforms,sorting,datagridview,C#,.net,Winforms,Sorting,Datagridview,如何在DataGridView中禁用排序?我需要禁用标题DataGridView排序。如果您希望静态地使列不可排序。你可以这样做 foreach (DataGridViewColumn column in dataGridView.Columns) { column.SortMode = DataGridViewColumnSortMode.NotSortable; } 打开DataGridView控件的EditColumns窗口 在左侧窗格中选择要使其不可排序的列 在右侧属性窗格中,

如何在
DataGridView
中禁用排序?我需要禁用标题
DataGridView
排序。

如果您希望静态地使列不可排序。你可以这样做

foreach (DataGridViewColumn column in dataGridView.Columns)
{
    column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
  • 打开DataGridView控件的EditColumns窗口
  • 在左侧窗格中选择要使其不可排序的列
  • 在右侧属性窗格中,选择排序模式属性并在其中选择“不可排序”
  • 使用LINQ:

    Datagridview1.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
    
    Datagridview1.Columns.Cast().ToList().ForEach(f=>f.SortMode=DataGridViewColumnSortMode.NotSortable);
    
    您可以在ColumnAdded事件中禁用它:

    private void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
    {
        dataGridView1.Columns[e.Column.Index].SortMode = DataGridViewColumnSortMode.NotSortable;
    }
    

    如果可以扩展DataGridView,则可以使用am空方法覆盖
    Sort
    方法。这将完全禁用DataGridView的排序

    public override void Sort(DataGridViewColumn dataGridViewColumn, ListSortDirection direction)
    {
        //base.Sort(dataGridViewColumn, direction);
    }
    
    注意:您甚至不能以编程方式对任何列进行排序。

    这非常简单:

    foreach (DataGridViewColumn dgvc in dataGridView1.Columns)
    {
        dgvc.SortMode = DataGridViewColumnSortMode.NotSortable;
    }
    
    private void dataGridView1\u DataBindingComplete(对象发送方,DataGridViewBindingCompleteEventTarget)
    {
    对于(int i=0;i
    对于像这样扩展控件功能,我喜欢使用扩展方法,以便可以轻松重用。这是一个starter extensions文件,其中包含一个用于禁用datagridview排序的扩展名

    要使用它,只需将其包含在项目中,然后像这样调用即可

    myDatagridView.DisableSorting()

    在我的例子中,我在DataGridView的DataBindingComplete事件处理程序中添加了这行代码,我希望在其中禁用排序

    Imports System.ComponentModel
    Imports System.Reflection
    Imports System.Runtime.CompilerServices
    Imports System.Windows.Forms
    
    Public Module Extensions
    
    <Extension()>
    Public Sub DisableSorting(datagrid As DataGridView)
        For index = 0 To datagrid.Columns.Count - 1
            datagrid.Columns(index).SortMode = DataGridViewColumnSortMode.NotSortable
        Next
    End Sub
    
    
    End Module
    
    导入System.ComponentModel
    输入系统。反射
    导入System.Runtime.CompilerServices
    导入System.Windows.Forms
    公共模块扩展
    公共子禁用排序(datagrid作为DataGridView)
    对于datagrid.Columns.Count-1的索引=0
    datagrid.Columns(index.SortMode=DataGridViewColumnSortMode.NotSortable
    下一个
    端接头
    端模块
    
    我正在寻找一种方法来禁用已经存在的
    DataGridView
    ,并找到了几个答案。奇怪的是,谷歌最初的几个搜索结果都是一些非常古老的话题。这是其中最早的一个,我决定把我的答案放在这里

    private void dgvDetails_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e)
    {
        e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
    }
    
    在属性窗口中单击
    ColumStateChanged
    时的说明如下:

    在列更改状态时发生,例如获得或失去焦点


    当然有很多方法可以做到这一点,但我想我应该在这里加上这个。不能说我在其他地方找到了它,但我只阅读了我找到的前5个主题。

    您可能想知道它在默认情况下是禁用的。但您可能指的是如何切换它(启用后禁用)。使用DGV的event ColumnAdded或override OnColumnAdded函数@黄金9年,还在考虑这件事吗?啊,这就解决了。不过,您可能希望编辑该答案以使枚举正常工作;)或者调用CanUserSort=“False”(VS15)虽然这可能会回答问题,但最好尽可能包含描述/参考。此答案与@hunter(五岁)的答案有何不同?
    private void dgvDetails_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e)
    {
        e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
    }