我需要禁用 DataGridView
中列头的排序。
我们可以通过设置各个列的属性来实现:
BalancesGridView.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
如果是这种情况,那么我就必须遍历所有列。
有更好的方法吗?
我需要禁用 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);
BalancesGridView.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
我认为循环遍历列并不是一个好的答案,尤其是当您的数据源时常变化。在ColumnAdded事件中加入一行代码即可解决问题:
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable
嗯,这有点老了,但是循环设置单个列的排序模式存在一些问题,例如,您允许用户添加更多列,那么您必须重新循环所有内容,或者找到添加的列并设置其排序模式。 这需要更多的工作。
我发现的解决方案如下链接:禁用DataGridView列标题的排序
在其中,您只需为该DataGridView添加ColumnAdded事件处理程序,因此每次datagrid添加列时,它会自动设置为不可排序
实际上,这就像@OldDog的答案,不同之处在于他的答案采用了迂回的方式设置排序模式。
Private Sub DataGridView1_ColumnAdded(sender As Object, e As DataGridViewColumnEventArgs) Handles DataGridView1.ColumnAdded
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable
End Sub
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的困境,除非使用绑定数据。然后,您可以为每个单独的列设置不可排序。
private void BalancesGridView_ColumnAdded(object sender, System.Windows.Forms.DataGridViewColumnEventArgs e)
{
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
private void gvItReq_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
for (int colIdx = 0; colIdx < gvItReq.Columns.Count; colIdx++)
gvItReq.Columns[colIdx].SortMode = DataGridViewColumnSortMode.NotSortable;
}
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
for (int i = 0; i < 10; i++)
{
dataGridView.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}