Подтвердить что ты не робот

Лучший способ отключить сортировку заголовков столбцов в DataGridView

Мне нужно отключить сортировку заголовка столбца в DataGridView.

Мы можем это сделать, установив свойство отдельных столбцов, например

BalancesGridView.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;

Если это так, тогда мне придется перебирать все столбцы.

Есть ли лучший способ?

4b9b3361

Ответ 1

Нет, я думаю, что установка SortMode в столбце напрямую так же хороша, как и получается. Но, честно говоря, кого это волнует? Что плохого в простой петле?

Ответ 2

Что плохого в этом? Если вам мешает вам перебирать столбцы или иметь несколько DataGridView, вы можете написать для этого метод расширения:

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

Используйте его следующим образом:

BalancesGridView.SetColumnSortMode(DataGridViewColumnSortMode.NotSortable);

Ответ 3

Я не знаю, почему никто не предлагает вам способ Linq:

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

Ответ 4

Хорошо, это немного устарело, но есть небольшая проблема с циклом для установки отдельного метода сортировки столбцов, например, вы позволяете пользователю добавлять больше столбцов, тогда вам нужно снова заново заново заново все это сделать или найти добавленный столбец и установите его sortmode. это немного больше работы.

найденное мной решение похоже на эту ссылку: Отключить сортировку при нажатии заголовка столбца DataGridView

вы просто добавляете обработчик событий ColumnAdded для этого DataGridView, поэтому каждый раз, когда datagrid добавляет столбец, он автоматически устанавливается как не сортируемый

это на самом деле так же, как @OldDog ответ, разница в том, что в его ответе, sortmode устанавливается обходным путем.

Private Sub DataGridView1_ColumnAdded(sender As Object, e As DataGridViewColumnEventArgs) Handles DataGridView1.ColumnAdded
    e.Column.SortMode = DataGridViewColumnSortMode.NotSortable
End Sub

Ответ 5

Сегодня я столкнулся с этой проблемой. Я написал этот метод и назвал его в событии загрузки формы.

    public void DisableGridviewSorting(DataGridView grid, int index)
    {
        //Index = DataGridView.Columns.Count
        for (int i = 0; i < index; i++)
        {
            grid.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
        }
    }

Похоже, вы довольно сильно зацикливаетесь в DataGridView независимо от того, как вы это делаете, если только вы не используете связанные данные. Затем вы можете установить не сортировку для каждого отдельного столбца.

Ответ 6

Если вы создаете DataGridView во время выполнения, вы можете отключить сортировку столбцов при добавлении столбцов с помощью события ColumnAdded:

private void BalancesGridView_ColumnAdded(object sender, System.Windows.Forms.DataGridViewColumnEventArgs e)
{
     e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}

Ответ 7

Я говорю, что цикл через столбцы не является таким отличным ответом, особенно если ваш источник данных время от времени меняется. Одна строка кода в событии ColumnAdded делает трюк:

e.Column.SortMode = DataGridViewColumnSortMode.NotSortable

Ответ 8

Я сделал это следующим образом:

private void gvItReq_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    for (int colIdx = 0; colIdx < gvItReq.Columns.Count; colIdx++)
        gvItReq.Columns[colIdx].SortMode = DataGridViewColumnSortMode.NotSortable;
}

Ответ 9

В VB я использую небольшую подпрограмму, которую я вызываю для каждого dgv, где я хочу, чтобы столбцы были несортируемыми:

Public Sub subNo_Sort_DGV_Columns(dgv As DataGridView)

  For intColumn_Count As Integer = 1 To dgv.Columns.Count - 1
    dgv.Columns(intColumn_Count).SortMode = _ DataGridViewColumnSortMode.NotSortable
  Next

End Sub

Ответ 10

Лучший способ, который я нашел для предотвращения сортировки, - это определить его цикл for, когда вы думаете, что у вас есть много столбцов для обработки.

for (int i = 0; i < 10; i++)
{
   dataGridView.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}