【发布时间】:2018-09-07 23:30:33
【问题描述】:
在 winforms .Net Framework 1.1 中,有什么方法可以禁用对数据网格中特定列的排序。
如果我尝试将允许排序设置为 false,则它会禁用所有列中的排序。但我需要禁用数据网格中的特定列。
this.dataGrid1.AllowSorting = false;
【问题讨论】:
标签: c# .net winforms datagrid .net-1.1
在 winforms .Net Framework 1.1 中,有什么方法可以禁用对数据网格中特定列的排序。
如果我尝试将允许排序设置为 false,则它会禁用所有列中的排序。但我需要禁用数据网格中的特定列。
this.dataGrid1.AllowSorting = false;
【问题讨论】:
标签: c# .net winforms datagrid .net-1.1
DataGrid 控件没有单独控制列排序的属性。您可以通过设置AllowSorting 来允许或禁止对所有列进行排序。
但是查看source code of the control,控件通过处理鼠标向上来执行排序,通过点击测试来检查鼠标是否在列标题上发生。因此,要自定义行为,您可以覆盖 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 检查那些可排序/不可排序的列索引。
【讨论】:
AllowSorting。
你可以按列号设置如下,
// Make fourth column not sortable
dataGridView1.Columns[3].SortMode = DataGridViewColumnSortMode.NotSortable;
【讨论】: