如何在 DataGridView 中禁用排序?

Posted

技术标签:

【中文标题】如何在 DataGridView 中禁用排序?【英文标题】:How to disable sort in DataGridView? 【发布时间】:2010-12-21 18:08:29 【问题描述】:

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

【问题讨论】:

您可能想知道默认情况下它是禁用的。但也许你的意思是如何切换它(启用后禁用)。 使用 DGV 的事件 ColumnAdded,或者重写 OnColumnAdded 函数。 Source @Gold 9 年了,还在考虑这个? 【参考方案1】:
foreach (DataGridViewColumn column in dataGridView.Columns)

    column.SortMode = DataGridViewColumnSortMode.NotSortable;

【讨论】:

【参考方案2】:

使用 LINQ:

Datagridview1.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);

【讨论】:

【参考方案3】:

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

    打开 DataGridView 控件的 EditColumns 窗口。 在左侧窗格中选择要使其不可排序的列。 在右侧属性窗格中,选择“排序模式”属性并在其中选择“不可排序”。

【讨论】:

啊,解决了。不过,您可能希望编辑该答案以使枚举正常工作;) 或调用 CanUserSort = "False" (VS15)【参考方案4】:

很简单:

foreach (DataGridViewColumn dgvc in dataGridView1.Columns)

    dgvc.SortMode = DataGridViewColumnSortMode.NotSortable;

【讨论】:

这个答案与@hunter 大五岁的答案有何不同?【参考方案5】:
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)

      for (int i = 0; i < dataGridView1.Columns.Count; i++)
      
           dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
      

【讨论】:

虽然这可能会回答问题,但最好尽可能包含描述/参考。【参考方案6】:

您可以在 ColumnAdded 事件中禁用它:

private void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)

    dataGridView1.Columns[e.Column.Index].SortMode = DataGridViewColumnSortMode.NotSortable;

【讨论】:

【参考方案7】:

如果您可以扩展 DataGridView,您可以用空的方法覆盖 Sort 方法。这会完全禁用 DataGridView 的排序。

public override void Sort(DataGridViewColumn dataGridViewColumn, ListSortDirection direction)

    //base.Sort(dataGridViewColumn, direction);

注意:您甚至不能以编程方式对任何列进行排序。

【讨论】:

【参考方案8】:

对于像这样扩展控制功能,我喜欢使用扩展方法,以便可以轻松地重用它。这是一个入门扩展文件,其中包含一个扩展以禁用对 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

【讨论】:

【参考方案9】:

我正在寻找一种方法来禁用我已经存在的 DataGridView 并遇到了几个答案。奇怪的是,谷歌的前几个结果是一些非常古老的话题。这是其中最早的一个,我决定把我的答案放在这里。

private void dgvDetails_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e)

    e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;

在属性窗口点击ColumStateChanged时的描述是:

“当列改变状态时发生,例如获得或失去焦点”

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

【讨论】:

以上是关于如何在 DataGridView 中禁用排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用在 DataGridView 中选择的能力?

如何在 DataGridView 中禁用或隐藏按钮

如何在 c# 中禁用可点击的 datagridview 中的空单元格

在 datagridview 中禁用单元格突出显示

如何从 DataGridView 控件底部删除空行?

如何禁用 VS datagridview 中的第一个自动选择?