2010-12-02 82 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中的所有列都不可排序。擴展方法本身並不是一個壞主意,但它並不完整。它需要有另一個參數,甚至可能超載,以允許列ID,列名稱或任意一個集合被傳入。 – 2010-12-02 12:44:30

+2

@Joel Etherton:再次閱讀他的問題。 OP希望通常禁用列標題排序。 – VVS 2010-12-02 13:33:04

+0

得到它的有輕微的變形例的工作: 公共靜態無效SetColumnSortMode(此的DataGridView的dataGridView,DataGridViewColumnSortMode sortMode) { 的foreach(在dataGridView.Columns DataGridViewTextBoxColumn列){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:

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的,所以數據網格添加列時,它都會被自動設置爲不可排序

這實際上就像@老狗的回答,不同之處在於在他的回答中,排序模式是以迂迴的方式設置的。

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 
相關問題