Wenn selection FullRowSelect ist, dann werden Sie SetSelectedRowCore für das Datagridview außer Kraft setzen müssen, und nicht rufen Sie die Basis SetSelectedRowCore für Zeilen, die Sie ausgewählt nicht wollen.
Wenn SelectionMode nicht FullRowSelect ist, sollten Sie SetSelectedCellCore zusätzlich überschreiben (und nicht die Basis SetSelectedCellCore für Zeilen, die nicht ausgewählt werden sollen), da SetSelectedRowCore nur dann eingreift, wenn Sie auf die Zeilenüberschrift klicken einzelne Zelle.
Hier ist ein Beispiel:
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
}
}
Wenn Sie WinForms verwenden, crack Ihre designer.cs für das entsprechende Formular öffnen und die Deklaration der Datagridview-Instanz ändern, anstatt Datagridview, diese neue Klasse zu verwenden, und ersetzen Sie auch das this.blahblahblah = new System.Windows.Forms.DataGridView(), um auf die neue Klasse zu verweisen.
Für diejenigen, die diese Frage gefunden zu wissen, wie Zeilen Auswahl überhaupt zu deaktivieren: Satz 'SelectionMode' Eigenschaft' CellSelect' – Pavel