2010-10-14 3 views
1

J'ai une vue DataGridView dans laquelle chaque ligne est cochée. Je souhaite uniquement que la ligne sélectionnée change lorsque l'utilisateur clique sur l'une des cellules de texte. Cependant, si l'on clique sur une case, j'aimerais quand même que la case à cocher change d'état et attrape cet événement.Empêcher la sélection de ligne dans la grille de données lorsque vous cliquez sur une case à cocher

J'ai cherché partout et trouvé quelques solutions qui corrigent la moitié du problème, mais je n'ai rien trouvé qui empêche 100% la ligne sélectionnée de changer lorsque je clique sur mes cases à cocher.

Répondre

1

Imaginé un travail autour. Au lieu d'écouter les événements SelectionChanged, j'ai écouté les événements CellMouseClick et j'ai activé mon drapeau propre pour la ligne sélectionnée.

J'ai également modifié le style de ligne par défaut afin qu'il n'y ait aucune indication sur la ligne sélectionnée. Ensuite, j'ai ajouté du code pour changer le style de ligne de la ligne qui a été sélectionnée selon ma propre ligne.


Ci-dessous est le code juste pour écouter CellMouseClicks sur certaines colonnes, le reste est très spécifique à mon application.

void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     // Make sure it is a left click 
     if(e.Button == MouseButtons.Left) 
     { 
      // Make sure it is on a cell 
      if (e.ColumnIndex >= 0 && e.RowIndex >= 0) 
      { 
       // Only allow certain columns to trigger selection changes (1 & 2) 
       if (e.ColumnIndex == 1 || e.ColumnIndex == 2) 
       { 
        // Set my own private selected row index 
        setSelectedRow(e.RowIndex); 
       } 
       else 
       { 
        // Actions for other columns... 
       } 
      } 
     } 
    } 
Questions connexes