簡體   English   中英

如何禁用 DataGridView 中的排序?

[英]How to disable sort in DataGridView?

如何禁用DataGridView中的排序? 我需要禁用標頭DataGridView排序。

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

使用 LINQ:

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

如果你想靜態地使列不可排序。 你可以這樣做

  1. 打開 DataGridView 控件的 EditColumns 窗口。
  2. 在左側窗格中選擇要使其不可排序的列。
  3. 在右側的屬性窗格中,選擇排序模式屬性並在其中選擇“不可排序”。

這很簡單:

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

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

private void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
    dataGridView1.Columns[e.Column.Index].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,則可以用空的方法覆蓋Sort方法。 這將完全禁用 DataGridView 的排序。

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

注意:您甚至不能以編程方式對任何列進行排序。

為了像這樣擴展控件功能,我喜歡使用擴展方法,以便可以輕松地重用它。 這是一個入門擴展文件,其中包含一個用於禁用數據網格視圖排序的擴展。

要使用它,只需將它包含在您的項目中並像這樣調用

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

我正在尋找一種方法來禁用我已經存在的DataGridView並遇到了幾個答案。 奇怪的是,谷歌上的前幾個結果是一些非常古老的話題。 這是其中最早的一個,我決定把我的答案放在這里。

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

在屬性窗口點擊ColumStateChanged時的描述是:

“當列改變狀態時發生,例如獲得或失去焦點”

當然有很多方法可以做到這一點,但我想我會在這里添加這個。 不能說我在其他地方找到了它,但話又說回來,我只閱讀了我找到的前 5 個主題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM