如何禁用 Datagrid 中的特定列排序?
How to disable specific column Sorting in Datagrid?
在 winforms .Net Framework 1.1 中,有什么方法可以禁用对数据网格中特定列的排序。
如果我尝试将允许排序设置为 false,则它会禁用所有列中的排序。但我需要禁用数据网格中的特定列。
this.dataGrid1.AllowSorting = false;
您可以按列号设置如下,
// Make fourth column not sortable
dataGridView1.Columns[3].SortMode = DataGridViewColumnSortMode.NotSortable;
DataGrid 控件没有 属性 来单独控制列的排序。您可以通过设置 AllowSorting
.
来允许或禁止对所有列进行排序
但是查看 source code of the control,控件通过处理鼠标弹起进行排序,通过 hit-testing 检查鼠标弹起是否发生在列 header 上。因此,要自定义行为,您可以覆盖 OnMouseUp
并通过传递假鼠标事件参数来欺骗基本方法:
public class MyDataGrid : DataGrid
{
protected override void OnMouseUp(MouseEventArgs e)
{
var hti = HitTest(e.X, e.Y);
var newArgs = new MouseEventArgs(e.Button, e.Clicks, -1, -1, e.Delta);
if (hti.Type == HitTestType.ColumnHeader && hti.Column == 0)
base.OnMouseUp(newArgs);
else
base.OnMouseUp(e);
}
}
然后你可以在窗体上使用MyDataGrid
控件:
您可以增强代码示例并添加 属性 以包含可排序或 non-sortable 属性的列表,而不是 hti.Column == 0
检查那些 sortable/non-sortable 列索引.
在 winforms .Net Framework 1.1 中,有什么方法可以禁用对数据网格中特定列的排序。
如果我尝试将允许排序设置为 false,则它会禁用所有列中的排序。但我需要禁用数据网格中的特定列。
this.dataGrid1.AllowSorting = false;
您可以按列号设置如下,
// Make fourth column not sortable
dataGridView1.Columns[3].SortMode = DataGridViewColumnSortMode.NotSortable;
DataGrid 控件没有 属性 来单独控制列的排序。您可以通过设置 AllowSorting
.
但是查看 source code of the control,控件通过处理鼠标弹起进行排序,通过 hit-testing 检查鼠标弹起是否发生在列 header 上。因此,要自定义行为,您可以覆盖 OnMouseUp
并通过传递假鼠标事件参数来欺骗基本方法:
public class MyDataGrid : DataGrid
{
protected override void OnMouseUp(MouseEventArgs e)
{
var hti = HitTest(e.X, e.Y);
var newArgs = new MouseEventArgs(e.Button, e.Clicks, -1, -1, e.Delta);
if (hti.Type == HitTestType.ColumnHeader && hti.Column == 0)
base.OnMouseUp(newArgs);
else
base.OnMouseUp(e);
}
}
然后你可以在窗体上使用MyDataGrid
控件:
您可以增强代码示例并添加 属性 以包含可排序或 non-sortable 属性的列表,而不是 hti.Column == 0
检查那些 sortable/non-sortable 列索引.