如何在 DataGridView 中禁用排序?

如何禁用排序在 DataGridView? 我需要禁用头 DataGridView排序。

132579 次浏览
foreach (DataGridViewColumn column in dataGridView.Columns)
{
column.SortMode = DataGridViewColumnSortMode.NotSortable;
}

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

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

使用 LINQ:

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

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

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_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
}

为了像这样扩展控制功能,我喜欢使用扩展方法,这样就可以很容易地重用它。下面是一个启动器扩展文件,其中包含一个扩展,可以禁用对 datagridview 进行排序。

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

禁用排序()

在我的例子中,我在 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

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

private void dgvDetails_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e)
{
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}

在属性窗口中单击 ColumStateChanged时的说明如下:

“在列更改状态(如获得焦点或失去焦点)时发生”

虽然有很多方法可以做到这一点,但我认为我应该在这里加上这一点。不能说我在别的地方找到了,但是我只读了我找到的前5个主题。