2008-09-16 11 views
12

Je souhaite désactiver la sélection de certaines lignes dans une vue de données.Désactiver la sélection de lignes dans un datagridview

Il doit être possible de supprimer la propriété select pour une ou plusieurs lignes datagridview dans une vue de données affichée dans un winform. L'objectif est que l'utilisateur ne puisse pas sélectionner certaines lignes. (Selon une condition)

Thankx,

+0

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

Répondre

16

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.

+0

Une solution qui fonctionne ... Mais pour cela, je pense que nous devons créer un Classe qui étend le contrôle de datagridview ... Ai-je raison ... N'avons-nous pas une solution qui fonctionne sur la classe datagridview actuelle –

+0

Je voudrais demander s'il y a une facilité pour mettre en évidence certaines colonnes même si la ligne est définie comme sélectionné. – Nap

+0

@szevvy, pouvez-vous expliquer plus loin? J'ai aussi besoin de cette réponse maintenant. – Sev09

-1
Private Sub dgvSomeDataGridView_SelectionChanged(sender As Object, e As System.EventArgs) Handles dgvSomeDataGridView.SelectionChanged 
     dgvSomeDataGridView.ClearSelection() 
End Sub