Si SelectionMode est FullRowSelect, alors vous aurez besoin de passer outre SetSelectedRowCore pour cette DataGridView, et pas appeler la SetSelectedRowCore de base pour les lignes que vous ne voulez pas sélectionné. Si SelectionMode n'est pas FullRowSelect, vous devez également remplacer SetSelectedCellCore (et ne pas appeler la base SetSelectedCellCore pour les lignes que vous ne voulez pas sélectionner), car SetSelectedRowCore ne fonctionnera que si vous cliquez sur l'en-tête de ligne et non sur cellule individuelle.
Voici un exemple:
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 vous utilisez WinForms, le crack ouvrir votre designer.cs pour la forme pertinente et modifier la déclaration de votre instance DataGridView d'utiliser cette nouvelle classe au lieu de DataGridView, et remplacez également the.blahblahblah = new System.Windows.Forms.DataGridView() pour pointer vers la nouvelle classe.
Pour ceux qui ont trouvé cette question de savoir comment désactiver les lignes de sélection du tout: set 'propriété SelectionMode' à' CellSelect' – Pavel