在 winforms .Net Framework 1.1 中,有什么方法可以禁用数据网格中特定列的排序。
如果我尝试将允许排序设置为 false,那么它会禁用所有列中的排序。但我需要禁用数据网格中的特定列。
this.dataGrid1.AllowSorting = false;
最佳答案
DataGrid控件没有单独控制列排序的属性。您可以通过设置 AllowSorting
来允许或禁止对所有列进行排序。
但调查source code of the control ,控件通过处理鼠标弹起来执行排序,通过 HitTest 检查鼠标弹起是否发生在列标题上。因此,要自定义行为,您可以覆盖 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
控件:
您可以增强代码示例并添加一个属性以包含可排序或不可排序属性的列表,而不是 hti.Column == 0
检查那些可排序/不可排序的列索引.
关于c# - 如何禁用 Datagrid 中的特定列排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49548750/