如何在DataGridView中禁用排序?

时间:2010-12-21 18:08:29

标签: c# .net winforms sorting datagridview

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

9 个答案:

答案 0 :(得分:65)

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

答案 1 :(得分:16)

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

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

答案 2 :(得分:15)

使用LINQ:

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

答案 3 :(得分:4)

非常简单:

foreach (DataGridViewColumn dgvc in dataGridView1.Columns)
{
    dgvc.SortMode = DataGridViewColumnSortMode.NotSortable;
}

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

public override void Sort(DataGridViewColumn dataGridViewColumn, ListSortDirection direction)
{
    //base.Sort(dataGridViewColumn, direction);
}

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

答案 6 :(得分:0)

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
      for (int i = 0; i < dataGridView1.Columns.Count; i++)
      {
           dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
      }
}

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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

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

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

尽管有很多方法可以做到这一点,但我想我将在这里添加它。不能说我在其他任何地方都找到了它,但是再说一次,我只读了发现的前5个主题。