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

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

【问题讨论】:

  • 您可能想知道默认情况下它是禁用的。但也许你的意思是如何切换它(启用后禁用)。
  • 使用 DGV 的事件 ColumnAdded,或者重写 OnColumnAdded 函数。 Source
  • @Gold 9 年了,还在考虑这个?

标签: c# .net winforms sorting datagridview


【解决方案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】:

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

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

      【讨论】:

      • 啊,解决了。不过,您可能希望编辑该答案以使枚举正常工作;)
      • 或调用 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 个主题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-21
              • 2012-03-20
              相关资源
              最近更新 更多