55 votes

Désélectionner toutes les lignes sélectionnées dans DataGridView

Je souhaite désélectionner toutes les lignes sélectionnées dans un fichier DataGridView lorsque l'utilisateur clique sur une partie vide (sans ligne) du contrôle. Comment puis-je faire cela ?

114voto

Cody Gray Points 102261

Pour désélectionner toutes les lignes et cellules d'un fichier DataGridView vous pouvez utiliser le ClearSelection méthode :

myDataGridView.ClearSelection()

Si vous ne voulez pas que la première ligne/cellule apparaisse sélectionnée, vous pouvez fixer le CurrentCell propriété à Nothing / null qui masquera temporairement le rectangle de focus jusqu'à ce que le contrôle reçoive à nouveau le focus :

myDataGridView.CurrentCell = Nothing

Pour déterminer si l'utilisateur a cliqué sur une partie vide de l'écran, il faut que l'utilisateur ait cliqué sur une partie vide de l'écran. DataGridView vous allez devoir gérer son MouseUp événement. Dans cet événement, vous pouvez HitTest l'emplacement du clic et observez si cela indique HitTestInfo.Nowhere . Par exemple :

Private Sub myDataGridView_MouseUp(ByVal sender as Object, ByVal e as System.Windows.Forms.MouseEventArgs)
    ''#See if the left mouse button was clicked
    If e.Button = MouseButtons.Left Then
        ''#Check the HitTest information for this click location
        If myDataGridView.HitTest(e.X, e.Y) = HitTestInfo.Nowhere Then
            myDataGridView.ClearSelection()
            myDataGridView.CurrentCell = Nothing
        End If
    End If
End Sub

Bien sûr, vous pouvez également sous-classer l'existant DataGridView pour combiner toutes ces fonctionnalités en un seul contrôle personnalisé. Vous devrez remplacer son OnMouseUp méthode de la manière indiquée ci-dessus. J'aime aussi fournir une fonction publique DeselectAll pour plus de commodité, qui appelle à la fois la ClearSelection et définit la méthode CurrentCell à la propriété Nothing .

(Les échantillons de code sont tous arbitrairement en VB.NET car la question ne précise pas de langage - toutes nos excuses si ce n'est pas votre dialecte maternel).

6voto

Tino Mclaren Points 522

Merci Cody, voici le c# pour la référence :

if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            DataGridView.HitTestInfo hit = dgv_track.HitTest(e.X, e.Y);
            if (hit.Type == DataGridViewHitTestType.None)
            {
                dgv_track.ClearSelection();
                dgv_track.CurrentCell = null;
            }
        }

1voto

David Points 2491

Définir

dgv.CurrentCell = null;

lorsque l'utilisateur clique sur une partie vide du dgv.

1voto

Mario Points 104

J'ai trouvé pourquoi ma première ligne était sélectionnée par défaut et j'ai trouvé comment ne pas la sélectionner par défaut.

Par défaut, mon datagridview était l'objet avec le premier arrêt de tabulation sur mon formulaire Windows. En plaçant la tabulation en premier sur un autre objet (ou en désactivant la tabulation pour le tableau de données), la sélection de la première ligne est désactivée.

0voto

Mario Points 104

J'ai rencontré le même problème et j'ai trouvé une solution (pas totalement par moi-même, mais il y a l'internet pour)

Color blue  = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;

foreach (DataGridViewRow r in datagridIncome.Rows)
{
    if (r.Cells[5].Value.ToString().Contains("1")) { 
        r.DefaultCellStyle.BackColor = blue;
        r.DefaultCellStyle.SelectionBackColor = blue;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
    else { 
        r.DefaultCellStyle.BackColor = red;
        r.DefaultCellStyle.SelectionBackColor = red;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
}

Il s'agit d'une petite astuce, la seule façon de voir qu'une ligne est sélectionnée, c'est par la toute première colonne (pas la colonne[0], mais la première donc). Lorsque vous cliquez sur une autre ligne, vous ne verrez plus la sélection bleue, seule la flèche indique quelle ligne a été sélectionnée. Comme vous l'avez compris, j'utilise rowSelection dans mon gridview.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X