DataGridView
控件允许您单击行标题并选择行(整行被高亮显示),或使用鼠标单击并拖动以选择多行等方式选择所有行。
无论如何,如果用户决定在 DataGridView
中的某个单元格上单击,则需要保留所选行。因此,如果用户单击所选行中的单元格,则应保留所选行的高亮显示。如果用户单击不同的、未选中的行中的单元格,则应保留所有当前选定的单元格的高亮显示。实际上,除非使用行标题,否则我不希望行选择发生任何变化。
这是一项易于配置的任务,还是需要几天时间进行编程?
DataGridView
控件允许您单击行标题并选择行(整行被高亮显示),或使用鼠标单击并拖动以选择多行等方式选择所有行。
无论如何,如果用户决定在 DataGridView
中的某个单元格上单击,则需要保留所选行。因此,如果用户单击所选行中的单元格,则应保留所选行的高亮显示。如果用户单击不同的、未选中的行中的单元格,则应保留所有当前选定的单元格的高亮显示。实际上,除非使用行标题,否则我不希望行选择发生任何变化。
这是一项易于配置的任务,还是需要几天时间进行编程?
DataGridViewSelectionMode
属性设置为 "FullRowSelect"?这会导致单击单个单元格选择整行。如果不是你想要的,请将该属性更改为类似于 "RowHeaderSelect" 的内容。(所有可能值都在此处列出。) - Cody GrayDataGridView
控件几天后,你会发现除非开发人员决定将其公开为属性,否则它的任何部分都不容易配置。而且只有最简单的东西以这种方式公开,所以不要浪费太多时间寻找。DataGridView
控件并覆盖我认为愚蠢的内置行为。但我真的不建议任何人这样做。OnRowHeaderMouseClick
方法的重写中自己添加它们。 - Cody Grayclass SimpleDataGridView : DataGridView {
public Action<DataGridViewCellMouseEventArgs> BeforeCellMouseDown;
public Action<DataGridViewCellMouseEventArgs> AfterCellMouseDown;
protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) {
if(BeforeCellMouseDown != null)
BeforeCellMouseDown(e);
base.OnCellMouseDown(e);
if(AfterCellMouseDown != null)
AfterCellMouseDown(e);
}
}
然后,在您的构造函数中可以这样使用它。将“yourCondition”替换为您想确定是否需要保留选择的方式。
IEnumerable<DataGridViewRow> sel = null;
dataGridView1.BeforeCellMouseDown =
e => {
if (yourCondition)
sel = dataGridView1.SelectedRows.OfType<DataGridViewRow>();
else
sel = null;
};
dataGridView1.AfterCellMouseDown =
e => {
if(sel != null) {
foreach(var row in sel)
row.Selected = true;
}
};