我需要在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