如何在 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 中禁用排序?的主要内容,如果未能解决你的问题,请参考以下文章