我需要在DataGridView
中禁用列標題排序。禁用DataGridView中列標題排序的最佳方法
我們可以做到這一點通過設置各列的性質類似
BalancesGridView.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
如果是這樣的話,那麼我會在所有的列具有循環。
有沒有更好的方法?
我需要在DataGridView
中禁用列標題排序。禁用DataGridView中列標題排序的最佳方法
我們可以做到這一點通過設置各列的性質類似
BalancesGridView.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
如果是這樣的話,那麼我會在所有的列具有循環。
有沒有更好的方法?
不,我認爲直接設置列上的SortMode是一樣好。但老實說,誰在乎?一個簡單的循環有什麼不好?
這是怎麼回事?如果你煩惱遍歷列,或者你有多個的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);
這並沒有實現任何目的。這使得datagridview中的所有列都不可排序。擴展方法本身並不是一個壞主意,但它並不完整。它需要有另一個參數,甚至可能超載,以允許列ID,列名稱或任意一個集合被傳入。 – 2010-12-02 12:44:30
@Joel Etherton:再次閱讀他的問題。 OP希望通常禁用列標題排序。 – VVS 2010-12-02 13:33:04
得到它的有輕微的變形例的工作: 公共靜態無效SetColumnSortMode(此的DataGridView的dataGridView,DataGridViewColumnSortMode sortMode) { 的foreach(在dataGridView.Columns DataGridViewTextBoxColumn列){dataGridView.Columns [column.Name] .SortMode = DataGridViewColumnSortMode。 NotSortable; } } – fa1c0n3r 2012-09-24 02:37:39
我今天就遇到了這個問題。我寫了這個方法,並在表單加載事件中調用它。
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無論你如何做,除非你使用綁定數據。然後,您可以爲每個單獨的列設置不可排序。
我不知道爲什麼沒有人建議你這樣做的LINQ的方式:
BalancesGridView.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
這對性能沒有幫助。只是簡化代碼。 – 2016-04-22 13:52:25
如果你建立在運行時DataGridView的,你可以禁用列進行排序的列使用ColumnAdded事件說:
private void BalancesGridView_ColumnAdded(object sender, System.Windows.Forms.DataGridViewColumnEventArgs e)
{
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
在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
我已經這樣做了:
private void gvItReq_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
for (int colIdx = 0; colIdx < gvItReq.Columns.Count; colIdx++)
gvItReq.Columns[colIdx].SortMode = DataGridViewColumnSortMode.NotSortable;
}
我發現,防止排序的最好方法是定義是定義它爲一個循環,當你認爲你有很多列來處理。
for (int i = 0; i < 10; i++)
{
dataGridView.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
很好,這是有點老了,但與循環設置單獨的列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
我說通過列循環不是一個很好的答案,尤其是如果您的數據源不斷變化。在ColumnAdded事件一行代碼的伎倆:
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable
存在與循環設置單獨的列sortmode,例如,你允許用戶添加更多的列了一點問題,那麼你得重新循環所有這一切,或找到添加的列並將其設置爲sortmode。這是一個更多的工作(對於重新循環的情況,在一個不可能的極端情況下,將單個列添加到已存在的數千個列中,這將是耗時的) – am05mhz 2016-01-14 03:32:56