Si SelectionMode es FullRowSelect, a continuación, tendrá que anular SetSelectedRowCore para que DataGridView, y no llame a la SetSelectedRowCore de base para las filas que no desea que seleccionó.
Si SelectionMode no es FullRowSelect, querrá anular adicionalmente SetSelectedCellCore (y no llamar a la base SetSelectedCellCore para filas que no desea que se seleccionen), ya que SetSelectedRowCore solo se activará si hace clic en el encabezado de fila y no celda individual
He aquí un ejemplo:
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
}
}
Si está utilizando Windows Forms, el crack abrir sus designer.cs de forma relevante, y cambiar la declaración de la instancia DataGridView a utilizar esta nueva clase en lugar de DataGridView, y también reemplaza this.blahblahblah = new System.Windows.Forms.DataGridView() para que apunte a la nueva clase.
Para quienes encontraron esta pregunta para saber cómo desactivar la selección filas en absoluto: conjunto '' SelectionMode' propiedad a CellSelect' – Pavel