C# 如何在DataGridView中禁用排序?
如何在C# 如何在DataGridView中禁用排序?,c#,.net,winforms,sorting,datagridview,C#,.net,Winforms,Sorting,Datagridview,如何在DataGridView中禁用排序?我需要禁用标题DataGridView排序。如果您希望静态地使列不可排序。你可以这样做 foreach (DataGridViewColumn column in dataGridView.Columns) { column.SortMode = DataGridViewColumnSortMode.NotSortable; } 打开DataGridView控件的EditColumns窗口 在左侧窗格中选择要使其不可排序的列 在右侧属性窗格中,
DataGridView
中禁用排序?我需要禁用标题DataGridView
排序。如果您希望静态地使列不可排序。你可以这样做
foreach (DataGridViewColumn column in dataGridView.Columns)
{
column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
Datagridview1.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
Datagridview1.Columns.Cast().ToList().ForEach(f=>f.SortMode=DataGridViewColumnSortMode.NotSortable);
您可以在ColumnAdded事件中禁用它:
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\u DataBindingComplete(对象发送方,DataGridViewBindingCompleteEventTarget)
{
对于(int i=0;i
对于像这样扩展控件功能,我喜欢使用扩展方法,以便可以轻松重用。这是一个starter extensions文件,其中包含一个用于禁用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
导入System.ComponentModel
输入系统。反射
导入System.Runtime.CompilerServices
导入System.Windows.Forms
公共模块扩展
公共子禁用排序(datagrid作为DataGridView)
对于datagrid.Columns.Count-1的索引=0
datagrid.Columns(index.SortMode=DataGridViewColumnSortMode.NotSortable
下一个
端接头
端模块
我正在寻找一种方法来禁用已经存在的DataGridView
,并找到了几个答案。奇怪的是,谷歌最初的几个搜索结果都是一些非常古老的话题。这是其中最早的一个,我决定把我的答案放在这里
private void dgvDetails_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e)
{
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
在属性窗口中单击ColumStateChanged
时的说明如下:
在列更改状态时发生,例如获得或失去焦点
当然有很多方法可以做到这一点,但我想我应该在这里加上这个。不能说我在其他地方找到了它,但我只阅读了我找到的前5个主题。您可能想知道它在默认情况下是禁用的。但您可能指的是如何切换它(启用后禁用)。使用DGV的event ColumnAdded或override OnColumnAdded函数@黄金9年,还在考虑这件事吗?啊,这就解决了。不过,您可能希望编辑该答案以使枚举正常工作;)或者调用CanUserSort=“False”(VS15)虽然这可能会回答问题,但最好尽可能包含描述/参考。此答案与@hunter(五岁)的答案有何不同?
private void dgvDetails_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e)
{
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}