2010-12-02 4 views
28

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

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

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

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

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

ответ

14

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

+1

есть небольшая проблема с зацикливанием, чтобы установить отдельный sortmode столбца, например, вы позволяете пользователю добавить несколько столбцов, то вам придется заново цикл все это снова, или найдите добавленный столбец и установите его sortmode. это немного больше работы (для случая повторного цикла, в невозможном крайнем случае добавления отдельных столбцов к уже имеющимся тысячам столбцов, это потребует много времени). – am05mhz 2016-01-14 03:32:56

13

Что в этом плохого? Если это беспокоит вас в цикл по столбцам или у вас есть несколько 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); 
+0

На самом деле ничего не получается. Это делает все столбцы в datagridview не отсортированными. Сам метод расширения - неплохая идея, но она неполна. Он должен иметь другой параметр и, возможно, даже перегрузку, чтобы разрешить идентификатор столбца, имя столбца или коллекцию, подлежащую передаче. – 2010-12-02 12:44:30

+2

@Joel Etherton: прочитайте его вопрос еще раз. OP хочет отключить сортировку заголовков столбцов в целом. – VVS 2010-12-02 13:33:04

+0

получил его на работу с небольшим изменением: государственной статической силы SetColumnSortMode (это DataGridView DataGridView, DataGridViewColumnSortMode sortMode) { Еогеасп (столбец DataGridViewTextBoxColumn в dataGridView.Columns) {dataGridView.Columns [column.Name] .SortMode = DataGridViewColumnSortMode. NotSortable; } } – fa1c0n3r 2012-09-24 02:37:39

3

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

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 независимо от того, как вы это делаете, если вы не используете связанные данные. Затем вы можете установить не сортируемый для каждого отдельного столбца.

7

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

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

Это не помогает в производительности. Просто делает код коротким. – 2016-04-22 13:52:25

2

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

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

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

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 
1

Я сделал это таким образом:

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

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

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

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

решение, которое я нашел, как по этой ссылке: Disable sorting when clicking DataGridView column header

в нем, вы просто добавить обработчик события 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 
4

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

e.Column.SortMode = DataGridViewColumnSortMode.NotSortable 
Смежные вопросы