在DataGridView中禁用列标题排序的最佳方法

Ana*_*nth 28 .net c# datagridview winforms

我需要禁用列标题排序DataGridView.

我们可以通过设置各列的属性来实现

BalancesGridView.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,那么我将不得不遍历所有列.

有没有更好的办法 ?

bit*_*onk 14

不,我认为直接在列上设置SortMode就好了.但老实说,谁在乎呢?一个简单的循环有什么坏处?


VVS*_*VVS 13

这有什么不好的?如果你不喜欢循环列或者有多个DataGridView,你可以为此编写一个扩展方法:

public static class DatatGridViewExtensions
{
    public static void SetColumnSortMode(this DataGridView dataGridView, DataGridViewColumnSortMode sortMode)
    {
        foreach (var column in dataGridView.Columns)
        {
            column.SortMode = sortMode;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

BalancesGridView.SetColumnSortMode(DataGridViewColumnSortMode.NotSortable);
Run Code Online (Sandbox Code Playgroud)

  • @Joel Etherton:再次阅读他的问题.OP希望一般禁用列标题排序. (2认同)

Co.*_*den 8

我不知道为什么没有人建议你Linq这样做的方式:

BalancesGridView.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
Run Code Online (Sandbox Code Playgroud)

  • 这对性能没有任何帮助.只是简化代码. (2认同)

old*_*guy 5

我说循环列并不是一个很好的答案,特别是如果您的数据源不时发生变化。ColumnAdded 事件中的一行代码就可以解决这个问题:

e.Column.SortMode = DataGridViewColumnSortMode.NotSortable
Run Code Online (Sandbox Code Playgroud)