如果SelectionMode为FullRowSelect,则需要为DataGridView重写SetSelectedRowCore,而不是为不希望选中的行调用基本的SetSelectedRowCore。
如果SelectionMode不是FullRowSelect,您将需要另外覆盖SetSelectedCellCore(而不是对不希望被选中的行调用基本的SetSelectedCellCore),因为SetSelectedRowCore只在单击行标题而不是单个单元格时生效。
这里有一个例子:
public class MyDataGridView : DataGridView
{
protected override void SetSelectedRowCore(int rowIndex, bool selected)
{
if (selected && WantRowSelection(rowIndex))
{
base.SetSelectedRowCore(rowIndex, selected);
}
}
protected virtual void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)
{
if (selected && WantRowSelection(rowIndex))
{
base.SetSelectedRowCore(rowIndex, selected);
}
}
bool WantRowSelection(int rowIndex)
{
//return true if you want the row to be selectable, false otherwise
}
}
如果你正在使用WinForms,打开designer.cs找到相关的表单,改变DataGridView实例的声明来使用这个新类而不是DataGridView,同时替换this。blahblahblah =新的System.Windows.Forms.DataGridView()指向新的类。